我遇到了一个问题,这个问题花了我一些时间来调试,因为我用于jQuery的一个插件(在本例中是jFeed)无法工作。问题最终是因为我们也使用了Amazon Associates product previews。该产品预览代码的结果是通过document.write()包含许多其他JS文件,包括jQuery的另一个副本。由于产品预览代码显示在jFeed脚本下面,因此重新定义了不带getFeed函数的jQuery。
有没有一种最佳实践来确保像jQuery这样的特定对象在一个页面上只定义一次?我正在考虑C/C++中的#ifndef,但我不知道在这种情况下它会如何工作,因为我没有再次编写动态引入jQuery的代码。
发布于 2010-02-10 14:34:44
我认为在您的情况下,最好将jQuery变量重新定义为其他变量。其他jQuery代码可能使用不同的版本,因此您可能希望定义一个新变量来指示您正在使用的jQuery。
你可以这样做:
<script>
var $jMain = jQuery;
</script>然后,您只需使用$jMain,而不是jQuery或$。在执行此操作时,将由您来确保拥有正确的jQuery对象。这是documentation。
发布于 2010-02-10 14:33:22
不幸的是,JS沙箱中的环境(就像在浏览器的窗口或框架中)并不是真正设计为支持从不同地方拉入脚本的现代世界;您不可能说“定义这个对象并使其不能重新定义”。(如果您尝试一下,甚至可以重新定义大多数Javascript内置组件!)
你最好的办法是确保你的代码是最后求值的,这让你在运行时对环境的状态有最终的决定权。这并不意味着其他代码不能随后出现并冲击您的定义,但这通常是非常糟糕的形式。例如,您可以通过将脚本标记作为文档体中的最后一个元素来实现此目的。
另请参阅这个jQuery方法,它不会直接帮助您,但会让您思考页面共享的一些解决方案:http://api.jquery.com/jQuery.noConflict/
https://stackoverflow.com/questions/2234862
复制相似问题