我正在开发一个依赖于 jQuery 的 javascript 小部件。小部件可能会也可能不会加载到已经加载了 jQuery 的页面上。在这种情况下会出现很多问题......
如果网页没有 jQuery,我必须加载我自己的 jQuery。然而,这样做时似乎存在一个微妙的时间问题。例如,如果我的小部件在 jQuery 完成加载和执行之前加载和执行,我会收到
jQuery is not defined
错误消息。如果网页确实有 jQuery,我通常可以使用它。但是,如果 jQuery 版本较旧,我想加载我自己的版本。但是,如果我确实加载了自己的内容,则需要以不踩踏
$
变量的方式进行加载。如果我设置了jQuery.noConflict()
并且他们的任何脚本依赖于$
,那么我刚刚破坏了他们的页面。如果网页使用另一个 javascript 库(例如原型),我还需要对原型
$
变量敏感。
由于上述所有因素,不依赖于 jQuery 似乎更容易。但是在我走那条主要涉及重写我的小部件代码的道路之前,我想先征求意见。
我的代码的基本框架,包括计时错误和有时的$
错误,如下:
<script type="text/javascript" charset="utf-8">
// <![CDATA
if (typeof jQuery === 'undefined') {
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = '{{ URL }}/jquery.js';
head.appendChild(script);
}
// ]]>
</script>
<script type="text/javascript" src="{{ URL }}/widget.js"></script>
我的小部件具有以下结构:
(function($) {
var mywidget = {
init: function() {
...
}
};
$(document).ready(function() {
mywidget.init();
});
})(jQuery);
如果有任何指针或资源来实现可以在所有提到的环境中工作的小部件,他们将不胜感激。