【问题标题】:Is there a good way to prevent jQuery from being redefined?有没有防止jQuery被重新定义的好方法?
【发布时间】:2010-02-10 06:27:07
【问题描述】:

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

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

【问题讨论】:

    标签: javascript include-guards


    【解决方案1】:

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

    你可以这样:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2023-03-22
        • 2016-11-25
        • 2013-10-12
        • 1970-01-01
        • 2010-09-06
        • 2011-01-23
        • 2021-12-03
        • 2017-05-22
        • 1970-01-01
        相关资源
        最近更新 更多