2013-02-13 75 views
1

我正在为一堆我为工作写的脚本制作cdn。我曾经不得不分发它们,每个人都得到这个文件并将其安装到他们的计算机上,但是我将它们移动到了amazon cloudfront/s3实例中。如何在bookmarklets中包含外部javascript文件?

我将使用此注射的书签: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);})(); 

那去的书签。

脚本:

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

显然,这并不工作,因为书签不再注入的jQuery。那么,最好的办法是什么呢?

回答

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

如果我的回答有帮助,请点击左边的复选标记以表明我的回答。 – 2013-03-07 05:44:30

相关问题