2010-02-10 150 views
2

我遇到了一个问题,我花了一些时间来调试我用于jQuery的插件(在这种情况下,jFeed)无法正常工作。问题最终因为我们还使用了Amazon Associates product previews。产品预览代码通过document.write()包括许多其他JS文件,包括jQuery的另一个副本。由于产品预览代码出现在jFeed脚本的下面,所以jQuery没有getFeed函数而被重新定义。有没有一种很好的方法来防止重新定义jQuery?

是否有最佳做法来确保某些对象(如jQuery)仅在页面上定义一次?我正在考虑使用C/C++ #ifndef之类的东西,但是我不知道在这种情况下它不会如何工作,因为我没有再编写动态地在jQuery中动态提取的代码。

回答

2

我认为,它很可能是最好的重新定义jQuery的变量作为别的东西。其他jQuery代码可能会使用不同的版本,因此您可能需要定义一个新变量来指示您正在使用哪个jQuery。

你可以使这样的事情:

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

你会那么只使用$jMain代替jQuery$。这将取决于你,以确保你拥有正确的jQuery对象。这里是documentation

0

不幸的是,一个JS沙箱内部的环境(如浏览器的窗口或框架内)并不是真正用于支持现代世界的各种场景的脚本;你无法说“定义这个对象并使其不能重新定义”。 (如果您尝试,您甚至可以重新定义大部分Javascript内置插件!)

最好的办法是确保您的代码是最后评估的,这会让您最终评论环境状态运行。这并不意味着其他代码不能晚点来临,并且会打破你的定义,但这通常是非常糟糕的形式。例如,您可以通过将脚本标记作为文档正文中的最后一个元素来完成此操作。

参见本jQuery的方法,它不会帮你直接,但让你想一些解决方案,以页面共享:在您的情况http://api.jquery.com/jQuery.noConflict/

相关问题