gpt4 book ai didi

jquery - 如果已经在页面上,则使 requireJs 不重新加载 jQuery

转载 作者:行者123 更新时间:2023-12-03 21:51:08 26 4
gpt4 key购买 nike

我正在编写一个脚本,该脚本旨在嵌入到第 3 方网站上以向其添加功能。我最近删除了相当困惑的自定义加载器代码并开始用 requirejs 替换它。 jQuery 是我可以选择加载的库之一(取决于传入的一些参数)。

这工作得很好,直到我的脚本包含在 jQuery 已经存在的页面上,在这种情况下,似乎会发生一些插件半途加载,requirejs 在页面版本上加载 jQuery,并且插件立即中断。

要求客户重写他们的页面只是为了使用这个脚本是不可能的,所以我想做的是检测 jQuery 是否已经加载,如果是,则跳过通过 requirejs 加载它,而只使用已经加载的加载一个(当他们使用更旧版本的 jQuery 时,这可能会让我遇到奇怪的边缘情况和错误,但我没有太多选择)。

我想做的是编写一个新模块,首先查看 jQuery 是否已加载,如果是,则导出 jQuery 对象,如果没有,则加载它,然后导出。但是,我似乎受到了阻碍,因为模块的定义函数似乎需要同步才能工作,所以我无法加载另一个异步脚本,然后将导出填充到 requirejs 中。

我在文档中遗漏了什么吗?我正在尝试的事情是不可能的吗?

最佳答案

我在一个类似的项目中遇到了同样的问题,使用 require.js 来加载要在第 3 方网站上加载的库。你可以看我的做法here ,但这是简化版本:

// check for existing jQuery
var jQuery = window.jQuery,
// check for old versions of jQuery
oldjQuery = jQuery && !!jQuery.fn.jquery.match(/^1\.[0-4](\.|$)/),
localJqueryPath = libPath + 'jquery/jquery-1.7.2.min',
paths = {},
noConflict;

// check for jQuery
if (!jQuery || oldjQuery) {
// load if it's not available or doesn't meet min standards
paths.jquery = localJqueryPath;
noConflict = !!oldjQuery;
} else {
// register the current jQuery
define('jquery', [], function() { return jQuery; });
}

// set up require
require.config({
paths: paths
});

// load stuff
require(['jquery', ... ], function($, ...) {

// deal with jQuery versions if necessary
if (noConflict) $.noConflict(true);

// etc

});

如您所见,这将查找 jQuery,然后将“jquery”模块定义为现有库的包装器,或者(如果没有 jQuery 或现有 jQuery 是旧版本)加载库 -具有 noConflict 的特定 jQuery。

这个效果非常好。唯一的缺点是您在脚本中动态调用 require(),这使得有效使用 r.js 优化器变得更加困难。

关于jquery - 如果已经在页面上,则使 requireJs 不重新加载 jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12267990/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com