我写了一个 jQuery 插件,比如说jquery.plugin.js
. 我想在大量网站上使用这个插件。
我想要做的是在其顶部编写一段 js 代码,jquery.plugin.js
将加载jquery.main.js
并执行它,以便$
在jquery.plugin.js
.
谢谢。
我写了一个 jQuery 插件,比如说jquery.plugin.js
. 我想在大量网站上使用这个插件。
我想要做的是在其顶部编写一段 js 代码,jquery.plugin.js
将加载jquery.main.js
并执行它,以便$
在jquery.plugin.js
.
谢谢。
您可能想要做的是在 js 中创建一个新标签
script = document.createElement('script');
script.src = 'URL-TO-JQUERY';
然后将该元素附加到第一个标记之前。
document.body.insertBefore(document.getElementsByTagName('script')[0], script);
这很可能会起作用,因为脚本是在任何其他 js 之前插入的。(头部除外)
是的,只是一个检查 jQuery 是否存在的间隔:
interval = setInterval(check, 100);
function check(){
if($.version){
// Exec script
}
}
只需将jquery.main.js
上面的jquery.plugin.js
. 如果您按此顺序放置脚本标签,它应该可以工作。
<script src="jquery.main.js"></script>
<script src="jquery.plugin.js"></script>
如果您无法完全控制 html 或者 jQuery 也可能从其他地方加载,请执行此操作以检查它是否已加载,并且仅在需要时加载。
从谷歌加载
if (typeof jQuery == 'undefined') {
document.write('<script type="text/javascript" src="http://www.google.com/jsapi"></script>');
document.write('<script type="text/javascript">');
google.load("jquery", "1.4.2");
document.write('</script>');
}
从同一台服务器加载
if (typeof jQuery == 'undefined') {
document.write('<script type="text/javascript" src="path/to/jquery.min.js"></script>');
}
仅在已经加载 jQuery 时才有效,
$.when($.getScript("path_to_script")).then(function() {
alert("loaded");
})
小提琴 - http://jsfiddle.net/fLuDd/
var fileref = document.createElement('script')
fileref.setAttribute("type", "text/javascript")
fileref.setAttribute("src", 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js')
document.getElementsByTagName("head")[0].appendChild(fileref)
var t = setInterval(function() {
if (typeof(jQuery) == 'function') {
alert("jquery loaded");
clearInterval(t);
}
}, 2000);
有一些 AMD 软件包可以满足您的需求,例如 requirejs,但是……您必须先加载它们!
您可以使用轮询技术(动态加载 jQuery 并轮询直到 $ 存在),但不是很优雅或高效。
您还可以将 onload 事件处理程序附加到动态 jQuery 脚本,这将在加载 jQuery 后触发您的插件。当然,这样的事件处理程序存在跨浏览器兼容性问题,所以用 jQuery 编写它们更容易。
底线:这很麻烦,通常最好只写两个脚本标签。
PS:以上一些技术在这篇文章中有解释:http: //www.stevesouders.com/blog/2008/12/27/coupling-async-scripts/