2

我遇到了一个问题,我花了一些时间来调试我用于 jQuery 的插件(在本例中为 jFeed)不起作用。问题最终是因为我们还使用了Amazon Associates 产品预览。产品预览代码最终通过 document.write() 包含许多其他 JS 文件,包括另一个 jQuery 副本。因为产品预览代码出现在 jFeed 脚本下方,所以重新定义了 jQuery,没有使用 getFeed 函数。

是否有最佳实践来确保某些对象(如 jQuery)只在页面上定义一次?我正在考虑使用 C/C++ 的 #ifndef 之类的东西,但我不知道在我没有编写再次动态拉入 jQuery 的代码的情况下它会如何工作。

4

2 回答 2

2

我认为在您的情况下,最好将 jQuery 变量重新定义为其他内容。其他 jQuery 代码可能使用不同的版本,因此您可能想要定义一个新变量来指示您正在使用的 jQuery。

你可以这样:

 <script>
    var $jMain = jQuery;
 </script>

然后,您只需使用$jMain代替jQueryor $。执行此操作时,您需要确保拥有正确的 jQuery 对象。这是文档

于 2010-02-10T06:34:43.633 回答
0

不幸的是,一个 JS 沙箱内的环境(例如在浏览器的窗口或框架内)并不是真正为支持从不同地方拉入脚本的现代世界而设计的;您无法说“定义此对象并使其抵抗重新定义”。(如果您尝试,您甚至可以重新定义大多数 Javascript 内置函数!)

你最好的办法是确保你的代码最后被评估,这让你对运行时的环境状态有最终决定权。这并不意味着其他代码不能稍后出现并破坏您的定义,但这通常是非常糟糕的形式。例如,您可以通过将脚本标记作为文档正文中的最后一个元素来做到这一点。

另请参阅此 jQuery 方法,它不会直接帮助您,但会让您思考一些页面共享的解决方案:http: //api.jquery.com/jQuery.noConflict/

于 2010-02-10T06:33:22.360 回答