2013-02-13 5 views
1

나는 작업을 위해 작성한 일련의 스크립트에 대한 CD를 작성하고 있습니다. 이전에는 파일을 배포해야했지만 각자 파일을 가져 와서 컴퓨터에 설치했지만 아마존 클라우드/s3 인스턴스로 옮길 것입니다. http://allben.net/post/2010/01/30/CSS-JavaScript-Injection-Bookmarklets북마크릿에 외부 자바 스크립트 파일을 포함하려면 어떻게해야합니까?

그러나, 기존의 방법 나는 JQuery와 북마크 생성기를 사용하는이 일을했다 : 나는 북마크를 주입하기 위해 사용할 것입니다

. 이것은 다른 것과 나는 그것을 사용하고 싶습니다 jquery를 포함하는 방법을 모르겠다.

javascript:(function(){var%20s=document.createElement('script');s.setAttribute('src','cdn.domain.com/scripts/somescript.js');document.getElementsByTagName('body')[0].appendChild(s);})(); 

책갈피에 간다 : 여기

은 예제 스크립트입니다.

스크립트 : 북마크가 더 이상 jQuery를 주입하기 때문에

alert($(somecontainer).size()); 

은 분명히이 작동하지 않습니다. 그래서, 이것에 대해 가장 좋은 방법은 무엇입니까?

답변

1

문제는 jQuery 북마크 생성기가 $을 페이지 내에서 사용할 수 없다는 것입니다. 함수 내에서 격리 된 jQuery 변수를 유지 한 다음 실행 후 페이지에서 jQuery를 완전히 제거합니다.

아래 코드는 수정 된 버전입니다 (http://benalman.com/projects/run-jquery-code-bookmarklet/).

function (e, a, g, h, f, c, b, d) { 
    if (!(f = e.jQuery) || g > f.fn.jquery || h(f)) { 
    c = a.createElement("script"); 
    c.type = "text/javascript"; 
    c.src = "http://ajax.googleapis.com/ajax/libs/jquery/" + g + "/jquery.min.js"; 
    c.onload = c.onreadystatechange = function() { 
     if (!b && (!(d = this.readyState) || d == "loaded" || d == "complete")) { 
     var s = document.createElement('script'); 
     s.setAttribute('src', 'cdn.domain.com/scripts/somescript.js'); 
     document.getElementsByTagName('body')[0].appendChild(s) 
     } 
    }; 
    a.documentElement.childNodes[0].appendChild(c) 
    } 
})(window, document, "1.3.2") 

이 페이지에있는 모든 jQuery$ 변수를 대체 할 있음을 유의하십시오. 이미 해당 변수를 사용하는 페이지에서 북마크릿을 실행해야하는 경우 jQuery.noConflict(1)을 사용하십시오. 예를 들어 _jq = e.jQuery.noConflict(1)$ 대신 _jq을 사용하고 원래 $jQuery을 원래 값으로 되돌립니다. 예 :
alert(_jq(somecontainer).size()); 

당신이 noConflict를 사용하지만 또한 당신의 .js 코드에서 $를 사용하는 함수에 코드를 포장하고 로컬로 만들려면

$을 범위. 예 :

(function(){ 
    var $ = _jq; // this $ will not affect any $ that exists outside this function. 
    alert($(somecontainer).size()); 
})(); 
+0

내 대답이 도움이 되었다면 왼쪽의 체크 표시를 클릭하여 동의하십시오. –