确保永远不要有 JQuery 冲突
Be sure that never have JQuery conflict
我需要创建可以用作每个站点截图的代码。当我将此代码复制粘贴到世界上任何 html 时,这应该可以工作:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script type="text/javascript"> my_jQuery = $.noConflict(true);</script>
<script type="text/jscript">
my_jQuery(document).ready(function () {
my_jQuery("#myDiv").html("Hello world");
});
</script>
<div id="myDiv">
</div>
当然,在现实世界中,逻辑会更复杂,但原理是相同的。
因此,即使站点已经有 JQuery,如果有相同版本的 JQuery,如果有不同的 JQuery 版本,或者即使根本没有 JQuery,这也必须有效。
我想确保客户端不使用某些旧版本的 JQuery,所以我希望始终使用我的 JQuery。
你怎么看,这会起作用还是有一些我没有考虑过的事情?
我认为这个问题应该以架构方式面对,知道哪些库/框架可用是一个设计问题......基本上,您不需要在运行时检查依赖项...如果你写jQuery
,你必须确定jQuery存在!
顺便说一下,在某些情况下你不能这样做,例如,如果你正在编写一个 public/api(在异构环境中运行的代码片段)。在这些情况下,您可以执行以下操作:
- 将
jQuery
标记为对等依赖项 - 在运行时检查。
有一个运行时检查的示例:
<script>
(function($) {
var jQueryUrl = 'https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js';
$ || (document.writeln('<script src="'+ jQueryUrl +'"></script>'));
})(window.jQuery);
</script>
为了避免冲突,最后,你不需要使用jQuery.noConflict
,你需要使用javascript范围(闭包)...基本上,永远不要尝试访问全局 jQuery 别名$
(永远不要使用全局变量),只需将其作为函数参数传递:
-
(function($) { console.log('$', $); })(window.jQuery)
-
window.jQuery(document).ready(function($) { console.log('$', $); });
我们需要做的第一件事是检查网站上是否存在jQuery。 jQuery是全局变量,因此如果加载了它,它应该在窗口对象中。我们可以这样检查:if (window.jQuery) {}
如果 jQuery 不存在,我们可以动态加载它,添加具有所需 jQuery 版本的脚本标记。因此,检查 jQuery 是否已加载和未加载(如果未加载)的片段答案如下所示:
if (!window.jQuery) {
var jq = document.createElement('script');
jq.type = 'text/javascript';
jq.src = 'http://code.jquery.com/jquery-1.12.1.min.js';
document.getElementsByTagName('head')[0].appendChild(jq);
}
这将适用于
- 因此,即使站点已经具有JQuery,这也必须有效,
- 如果有相同版本的 JQuery,
- 如果有不同的 JQuery 版本,
正如您根据代码看到的那样,除了第 4 种情况外,这适用于所有三种情况。对于这种情况,你必须检查窗口是否有jQuery对象。这可以通过以下方式完成:
if(window.jQuery){
var my_jQuery = $.noConflict(true);
my_jQuery(document).ready(function () {
my_jQuery("#myDiv").html("Hello world");
});
}
注意:
<script type="text/jscript">
在IE以外的浏览器中不起作用。
- 返回按钮代码段的Jquery冲突
- javascript对象原型与jquery冲突
- 为什么'滚动到顶部'脚本导致类型错误?jQuery冲突
- 如何解决jQuery冲突
- Jquery冲突单击
- 可能与JQuery冲突
- mootools和jquery冲突-noconflict对我不起作用
- Unite Revolution 滑块与 Joomla 中的 jquery 冲突
- 确保永远不要有 JQuery 冲突
- 如何解决两个 jquery 冲突
- 下拉菜单和 AJAX 窗口之间的 jquery 冲突
- 如何解决光滑的轮播jquery冲突问题
- 未定义 jQuery,并且 jquery 冲突
- Jquery冲突问题
- 日历和快速搜索的 Jquery 冲突问题
- RequireJS :处理与填充程序和非AMD加载脚本的jQuery冲突
- 加载插件时不同版本的 jQuery 冲突
- JavaScript 函数名称与 jQuery 冲突
- 避免 chrome 扩展程序中的 jquery 冲突
- 水平鼠标滚轮滚动与地图 JQuery 冲突