我遇到了一个问题,花了我一些时间来调试我用于jQuery的插件(在这种情况下是jFeed)无法正常工作。问题最终是因为我们还使用了Amazon Associates product previews。产品预览代码最终通过document.write()包含许多其他JS文件,包括jQuery的另一个副本。因为产品预览代码出现在jFeed脚本下面,所以在没有getFeed函数的情况下重新定义了jQuery。
是否有最佳做法可确保某些对象(如jQuery)仅在页面上定义一次?我正在考虑使用带有C / C ++的#ifndef之类的东西,但我不知道在这种情况下它是如何工作的,我没有编写动态拉入jQuery的代码。
答案 0 :(得分:2)
我认为在你的情况下,最好将jQuery变量重新定义为其他东西。其他jQuery代码可能使用不同的版本,因此您可能希望定义一个新变量来指示您正在使用的jQuery。
你可以这样:
<script>
var $jMain = jQuery;
</script>
然后,您只需使用$jMain
代替jQuery
或$
。当你这样做时,你应该确保你拥有正确的jQuery对象。这是documentation。
答案 1 :(得分:0)
不幸的是,一个JS沙箱内的环境(如浏览器的窗口或框架内)并不是真正意图支持从各个地方拉入脚本的现代世界;你无法说“定义这个对象并使其抵制重新定义”。 (如果你尝试,你甚至可以重新定义大多数Javascript内置函数。)
最好的方法是确保您的代码最后被评估,这样可以在运行时对环境状态给出最终决定权。这并不意味着其他代码不能在以后出现并破坏您的定义,但这通常是非常糟糕的形式。例如,您可以通过将脚本标记作为文档正文中的最后一个元素来完成此操作。
另请参阅此jQuery方法,它不会直接帮助您,但会让您考虑一些页面共享解决方案:http://api.jquery.com/jQuery.noConflict/