我正在编写一个需要 jQuery 的脚本。它将被加载到一个可能已经或可能没有加载 jQuery 的网站上。有什么方法可以让我的 jQuery 版本加载到全局命名空间之外,以便在我的匿名函数之外无法访问它?
问问题
232 次
2 回答
6
没必要,正确使用noConflict即可。这就是它的预期目的。
<script src="jquery.js"></script>
<script src="someplugin.js"></script>
<script>
(function($){
$.doSomething();
})($.noConflict(true));
</script>
虽然视情况而定,但通常最好只要求客户端在包含您的代码之前包含 jquery。(Polaris878 在对您的问题的评论中暗示了这一点)
于 2013-06-06T19:37:47.503 回答
1
首先,您应该检查是否已经加载了 jQuery。如果已加载,您只需使用它,否则加载 jQuery 并使用它。一个简单的javascript可以使它成为可能
myjQ = null;
if (typeof window.jQuery == 'undefined') {
load_script('http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js', callback_fn );
} else {
callback_fn();
}
load_script = function(url, callback) {
var script = document.createElement("script");
script.type = "text/javascript";
if (script.readyState) {
script.onreadystatechange = function () {
if (script.readyState == "loaded" || script.readyState == "complete") {
script.onreadystatechange = null;
callback();
}
};
} else {
script.onload = function () {
callback();
};
}
script.src = url;
document.getElementsByTagName("head")[0].appendChild(script);
};
callback_fn = function(){
myjQ = jQuery.noConflict();
// you can use myjQ just like $ here.
}
可能你可以将所有这些函数包装在一个对象中,这样它们就不会污染全局命名空间。
于 2013-06-06T19:43:57.820 回答