2012-02-09 2 views
0

사용자 컨트롤 (myUserControl.ascx)이 있습니다. 스크립트 태그를 추가하고 "src"를 동적으로 할당하고 onload 및 onerror 이벤트를 확인하려고 시도하지만 작동하지 않는 것 같습니다. 버튼 클릭시 PerformDynamicJS를 호출합니다.asp.net 사용자 정의 컨트롤에서 스크립트 태그를 동적으로 추가하는 방법은 무엇입니까?

function PerformDynamicJS(){ 
var scriptGoogle = document.createElement("script"); 
scriptGoogle.type = "text/javascript"; 
scriptGoogle.src = "myscript.js"; 
scriptGoogle.onload = function (evt) { 
      alert('Inside onload'); 
     } 
scriptGoogle.onerror = function (evt) { 
      alert('Inside on error'); 
     } 
} 
+0

http://stackoverflow.com/questions/4117712/add-script-tag-within-head-tag-within-head-tag-with-head-tag-in-servercontrol-asp-net – Neha

답변

1

문서에 새로 생성 된 태그를 추가

document.getElementsByTagName('head')[0].appendChild(scriptGoogle); 
+0

내 머리글 태그를 가져올 수 없습니다. 내 머리글 태그는 내 사용자에게 없습니다. 제어. 그것은 내 마스터 페이지에 있습니다. –

+0

사용자 컨트롤인지 여부는 중요하지 않습니다. JavaScript 기능 "PerformDynamicJS"에서 전체 문서에 액세스 할 수 있습니다. 페이지에 섹션이 없으면 "document.getElementsByTagName (...)"대신 "document.body"를 사용하십시오. – volpav

1
var script = document.createElement("script"); 
script.setAttribute("type", "text/javascript"); 
script.setAttribute("src", "url to the script file here"); 
document.getElementsByTagName("head")[0].appendChild(script); 

는 내가 전에 스크립트 "온로드"를보고, 나는 그런 이벤트를 찾는 기억하지 않습니다. 나는 타이머 기반의 js 코드를 작성하여 다운로드되는 스크립트에서 정의 된 것으로 예상되는 객체를 자주 확인했다. 따라서 스크립트 태그를 삽입 한 코드 내에서 아무것도하지 않는 것이 좋습니다. 스크립트가 준비되면 완벽하게 시간을 할애 할 수 있습니다. 스크립트 자체에 "래핑되지 않은"코드를 추가하십시오. (예 : alert("I, the script, loaded and I'm ready with these functions that I provide");

그리고 스크립트는 다운로드 할 것인지 또는 어떤 이유로 든 사용할 수 없음, 연결 오류, 서버 오류 등 "오류 발생"사례는 없습니다. [다운로드 ], 스크립트가 실행/사용되는 동안 발생할 수있는 오류는 실제로 전송 관련이 아닙니다 (이러한 오류는 다른 스크립트 오류를 ​​처리하는 것과 같은 방법으로 처리해야합니다). 따라서 여기에 "onerror"가있는 의도는 아닙니다. 적합 (IMO). +1 :

편집 : 다운로드하지 않으면 실행되지 않습니다. , 당신은 그것을 사용할 수 없을 것입니다. 클라이언트 코드가 실제로 대기 중이면 타이머 기반 타임 아웃 논리를 작성해야합니다. 예를 들어, 위의 "추가 머리에"줄 끝에서, 같은 것을 할 :

window.setTimeout(function() 
{ 
    // object/variable "newScriptObject" is defined in the new script 
    if(!newScript) 
    { 
     // script timed out; let's proceed with plan B 
    } 
    else 
    { 
     // script ready, proceed as planned; 
     // although, like I said, I think it's more precise if you execute this code in your myscript.js instead - as maybe that code will be ready before the 5 sec assumed here 
     // alternatively, use window.setInterval to check for objects defined this script every so milliseconds, in which case, when you find the script, don't forget to stop that timer (window.clearInterval) 
    } 
}, 5000); // wait 5 sec for the new script 

마지막으로,이 맥락에서 "부분 다운로드 '같은 것은 존재하지 않는다. 정상적인 브라우저는 완전히 다운로드되지 않았을뿐만 아니라 구문 분석 (해석) 된 스크립트의 실행을 시작하지 않습니다. "해석 된"부분은 어딘가에 중괄호를 놓치거나 다른 구문 오류로 인해 관련없는 위치를 가리키는 JS 오류가 나타나는 이유입니다. 이러한 문법 오류는 코드 블록을 완전히 "이동"(일종의)하기 때문에 적어도 무엇이 무엇인지 파악할 수 없기 때문에 중괄호가 없다는 것이이 범주에 속합니다. 주제를 조금 벗어나서 죄송합니다.

관련 문제