动态js和jquery冲突
我们有一个HTML模板,它被许多应用程序共享。现在我们必须从供应商那里实现一些js,我们被要求在body标记后面放一个js引用,而js实际上使用document.getElementsByTagName('script')和insertBefore方法在head标记后面动态注入一些js,因此最终的html如下所示:动态js和jquery冲突,jquery,Jquery,我们有一个HTML模板,它被许多应用程序共享。现在我们必须从供应商那里实现一些js,我们被要求在body标记后面放一个js引用,而js实际上使用document.getElementsByTagName('script')和insertBefore方法在head标记后面动态注入一些js,因此最终的html如下所示: <head> <script> A </script> <script> B </script> <
<head>
<script> A </script>
<script> B </script>
<body>
<script> first </script>
A.
B
第一
问题,由于脚本A/B正在使用jQuery,而且这是一个模板html,使用此模板的应用程序可能会有其他一些不同的jQuery加载,我应该如何避免冲突?我知道我们应该使用$.noConflit方法,但我不确定如何做到这一点
我们不允许更改第一个/A/B脚本,因此我认为我们应该为这些人保留“$/jquery”。我还想确保每个应用程序加载的jQuery仍然可以使用$哇,下面是在假设A/B是内部的/“您的”的情况下编写的。因为事实并非如此,后者并不严格适用——祝你好运
要编写与其他代码完全隔离的代码(即独立于其他地方的
$
或jQuery
),请使用
一个简单的表单如下所示:
;(function ($) { // Dependencies bound here (in parameters)
// Rest of your code;
// you can be assured that $ is for "your" jQuery
// because it was bound/injected when the script was executed.
})(jQuery.noConflict()) // Dependencies injected here - immediately.
这使得隔离依赖项和“绑定”到特定对象变得很容易(ier)——在这种情况下,可以在运行此脚本后重新分配jQuery
,这不会有什么区别,因为正确的jQuery对象已经绑定。如果需要,也可以轻松转换为(或不同的模块加载器)
只需确保在A/B脚本之前加载jQuery的“您的”版本,在C脚本之前加载“他们的”版本(如果需要)。请记住,默认情况下脚本元素的执行是同步的
<head>
<script src="YourVersionOfJQuery"> </script>
<script> A </script>
<script> B </script>
<body>
<script src="TheirDependenciesAndMaybeOldjQueryVersion"> </script>
<script> /* other setup as required */ </script>
<script> C </script>
A.
B
/*需要的其他设置*/
C
您可能需要“播放”不同的顺序。对不起,我如何在注释中添加换行符?@Zhongmin不能:)使用反勾号表示代码、标记和分号,或者使用
\n
表示换行意图。A B/*根据需要进行其他设置*/C,这样我就不需要调用NoConflits方法了?我在头部有所有的js。