如何在bookmarklet中包含外部javascript文件?
我正在为我为工作编写的一系列脚本制作cdn。我以前必须分发它们,每个人都得到文件并将其安装到他们的计算机上,但我正在将它们移动到amazon cloudfront/s3实例上 我将使用它来注入bookmarklet: 然而,按照以前的方法,我使用了jquery bookmarklet生成器。这与此不同,如果我想使用jquery,我不知道如何包含它 下面是一个示例脚本:如何在bookmarklet中包含外部javascript文件?,javascript,jquery,cdn,bookmarklet,Javascript,Jquery,Cdn,Bookmarklet,我正在为我为工作编写的一系列脚本制作cdn。我以前必须分发它们,每个人都得到文件并将其安装到他们的计算机上,但我正在将它们移动到amazon cloudfront/s3实例上 我将使用它来注入bookmarklet: 然而,按照以前的方法,我使用了jquery bookmarklet生成器。这与此不同,如果我想使用jquery,我不知道如何包含它 下面是一个示例脚本: javascript:(function(){var%20s=document.createElement('script');
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());
显然,这不起作用,因为bookmarklet不再注入jquery。那么,最好的方法是什么呢?我想,您面临的问题是jQuery bookmarklet生成器无法在页面中提供
$
。它将jQuery变量隔离在函数中,然后在运行后将jQuery完全从页面中删除
下面是此处代码的修改版本:应该可以使用
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
和$
变量。如果需要在已经使用这些变量的页面上运行bookmarklet,请使用jQuery.noConflict(1)
。例如,\u jq=e.jQuery.noConflict(1)
将允许您使用\u jq
而不是$
,并将原始$
和jQuery
返回到其原始值。例如:
alert(_jq(somecontainer).size());
(function(){
var $ = _jq; // this $ will not affect any $ that exists outside this function.
alert($(somecontainer).size());
})();
如果您想在.js代码中使用noConflict,但也要使用$,请将代码包装在函数中,并创建一个本地范围的$
。例如:
alert(_jq(somecontainer).size());
(function(){
var $ = _jq; // this $ will not affect any $ that exists outside this function.
alert($(somecontainer).size());
})();
我想,您面临的问题是jquerybookmarklet生成器无法在页面中提供
$
。它将jQuery变量隔离在函数中,然后在运行后将jQuery完全从页面中删除
下面是此处代码的修改版本:应该可以使用
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
和$
变量。如果需要在已经使用这些变量的页面上运行bookmarklet,请使用jQuery.noConflict(1)
。例如,\u jq=e.jQuery.noConflict(1)
将允许您使用\u jq
而不是$
,并将原始$
和jQuery
返回到其原始值。例如:
alert(_jq(somecontainer).size());
(function(){
var $ = _jq; // this $ will not affect any $ that exists outside this function.
alert($(somecontainer).size());
})();
如果您想在.js代码中使用noConflict,但也要使用$,请将代码包装在函数中,并创建一个本地范围的$
。例如:
alert(_jq(somecontainer).size());
(function(){
var $ = _jq; // this $ will not affect any $ that exists outside this function.
alert($(somecontainer).size());
})();