2009-02-09 6 views
1

위젯을 추가 할 수 있도록 임의의 웹 사이트에 최소한의 js 코드를 제공하고 싶습니다.매개 변수가있는 외부 js 파일을 추가하는 방법

코드는 기본 페이지가로드되고 도메인 이름과 함께 매개 변수가 포함 된 후에 실행해야합니다. 이 아니라에서 IE에서 작동

<script type="text/javascript" id="widget_script"> 
    document.getElementById('widget_script').src=location.protocol.toLowerCase()+"//mywebsite.com/?u="+encodeURIComponent(window.location.host);   
</script> 

을 :

하나의 옵션 (그래서 그것은 페이지가로드 한 후 실행) 바로 </body> 전에이 코드를 추가하는 것입니다 (나는 그것을 하드 코드 싶지 않아) Firefox. Firebug에서 src 속성이 올바르게 생성되었지만 내 사이트의 스크립트가로드되지 않았 음을 알 수 있습니다.

내 질문은 : 그게 가장 좋은 방법은 무엇입니까? (헤더 부분에 최소한의 줄을 넣는 것이 좋습니다.)

질문을 명확히하기 위해 : 머리글 부분에 스크립트를 삽입하면로드 된 후 기본 페이지가로드 된 후 어떻게 실행합니까? 스크립트에서 onload 이벤트를 사용하면 onload 이벤트가 실행 된 후로드 될 수 있으므로 놓칠 수 있습니다.

답변

0

비 차단 스크립트 기술을 구현하고 싶을 것입니다. 기본적으로 스크립트의 src를 수정하는 대신 완전히 새로운 스크립트 요소를 만들고 추가 할 것입니다.

좋은 점은 here이며, YUI 및 jQuery에서이를 수행하는 표준 방법이 있습니다. 그것은 꽤 이해하기 쉽고 (그리고 그 링크에서 문서화 된) 하나의 잡기로 아주 간단합니다.

아, 그리고이 :

이 ... 기술적으로되지 않습니다 :

하나의 옵션 (그래서 그것은 페이지가로드 한 후 를 실행합니다) 단지 </body> 전에이 코드를 추가하는 것입니다 사실 : 스크립트를 로딩 순서의 마지막 것으로 만들기 만하면됩니다.

+0

소개해 주셔서 감사합니다! 이 기술은 과도한 것으로 보이며 브라우저 호환성에 대해 확신하지 못합니다. 내 목표는 더 빨리로드하지 않고 원래 페이지의 정보에 액세스하기 위해 페이지를로드 한 후에 실행하는 것입니다. – Nir

+0

알고 있습니다. 그러나이 기술로도 문제가 해결됩니다. xbrowser가가는 한, 유일한 단점은 firefox가 setTimeout 부분이 해결하는 이상한 타이머 문제가 있다는 것입니다. 그것은 당신이 그것을 필요로하지 않을 수도 있습니다. – annakata

+0

링크가 다운되었으므로 답변을 얻을 수있는 방법이 없습니다. 이것은 왜 당신이 링크에서 stackoverflow 및 복사/붙여 넣기/blockquote 답변 이상의 링크를 게시하는 이유입니다. –

1

getScript jQuery 메서드를 사용하여 로딩하지 않는 이유는 무엇입니까? jQuery에 의존하고 싶지 않다면, trace through the source을 사용하여 그들이 어떻게 태클을했는지 알 수 있습니다.

널리 사용되는 라이브러리를 보는 것은 항상 당신이 모르는 문제에 대한 해결책을 보여줄 것입니다. 예를 들어 jQuery가 스크립트가로드 될 때 콜백을 생성하는 방법과 IE에서 메모리 누수가 발생하지 않도록하는 방법을 볼 수 있습니다.

+0

OP는 그가 jQuery를 사용하고 있다고 실제로 말하지 않습니다 ... – annakata

+0

2 문장을 참조하십시오! –

+0

글쎄,하지만 당신은 "왜 안돼"로 시작했는지, 추적 비트는 내가 연결된 대답을 알려주고 Aleris가 썼습니다. – annakata

2

문서와 함께 스크립트를 정적으로 포함 할 수 있습니다.쓰기 (이전 기법이 아니라 더 현대적인 도서관에 문제가 발생할 수로 사용하는 것이 좋습니다) :

var dynamicInclude = document.createElement("script"); 
dynamicInclude.src = url; 
dynamicInclude.type = "text/javascript"; 
document.getElementsByTagName("head")[0].appendChild(dynamicInclude); 

나중에 편집 :

var url = location.protocol.toLowerCase() + 
    "//mywebsite.com/?u="+encodeURIComponent(window.location.host); 
document.write('<script src="', url, '" type="text/javascript"><\/script>'); 

또는를 동적으로 생성 된 DOM 요소와 onload 후 스크립트가 실행되도록하려면 다음을 사용할 수 있습니다.

var oldWindowOnload = window.onload; 
window.onload = function() { 
    oldWindowOnload(); 
    var url = location.protocol.toLowerCase() + 
     "//mywebsite.com/?u="+encodeURIComponent(window.location.host); 
    var dynamicInclude = document.createElement("script"); 
    dynamicInclude.src = url; 
    dynamicInclude.type = "text/javascript"; 
    document.getElementsByTagName("head")[0].appendChild(dynamicInclude); 
} 

짧은 변수 이름을 제외하고는 이보다 더 짧을 수 있습니다. :)

+0

답해 주셔서 감사합니다. 로드하는 스크립트가 onload 함수로 연결되는 코드 묶음없이로드 된 후 어떻게 실행되는지 확인하고 코드를 작성하려면 어떻게해야합니까? # 2의 경우 : – Nir

+0

스크립트가 생성 될 때 스크립트가 자동으로 소스를 실행합니다. onload 후에 스크립트 요소 생성 블록을 실행하는 방법입니다 – annakata