Javascript requirejs:在不同的站点上不一致地加载库
我试图通过require.js加载store.js时遇到了一些问题,结果是每个站点的结果都不一样(我尝试使用bookmarklet)。我正在使用这里的站点列表 bbc.com和fool.com起作用,但其他的(,)是不一致的。例如,有时候jquery不可用,有时候qtip不可用,有时候store不可用Javascript requirejs:在不同的站点上不一致地加载库,javascript,requirejs,Javascript,Requirejs,我试图通过require.js加载store.js时遇到了一些问题,结果是每个站点的结果都不一样(我尝试使用bookmarklet)。我正在使用这里的站点列表 bbc.com和fool.com起作用,但其他的(,)是不一致的。例如,有时候jquery不可用,有时候qtip不可用,有时候store不可用 if (window.require) { requirejs.config({ paths: { jq: '//cdnjs.cloudflare.
if (window.require) {
requirejs.config({
paths: {
jq: '//cdnjs.cloudflare.com/ajax/libs/jquery/1.8.2/jquery.min',
qtip2: '//cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.0/jquery.qtip',
json2: '//cdnjs.cloudflare.com/ajax/libs/json2/20130526/json2.min',
jstore: '//cdnjs.cloudflare.com/ajax/libs/store.js/1.3.14/store.min'
},
map: {
'qtip2': { 'jq': 'jquery-private' },
'json2': { 'jq': 'jquery-private' }
},
findNestedDependencies: true
});
define('jquery-private', ['jq'], function () {
return jQuery.noConflict(true);
});
require(['jstore'], function(store){
require(['jquery-private', 'qtip2', 'json2'], function (jay) {
console.log(store);
console.log(jay);
qtip2Initializer(jay,store);
});
});
}
function qtip2Initializer(jay,store) {
console.log(jay().jquery);
// Your logic to execute when qTip2 is available
jay(document).ready(function () {
$('a').qtip();
store.set("test",1);
});
}
你的代码在某些网站上不起作用,这一点并不神秘。我没有查看整个列表,但是没有
窗口。需要定义,以便您显示的代码可以测试它,发现它不存在,并跳过if
分支。以下是任何给定站点可能无法按预期工作的一些原因:
由社区维护的站点列表。所以这很可能是错误的。如果一个站点曾经使用过RequireJS,但现在不再使用了,我不希望他们的开发者运行到这个列表并删除链接
window.require
可能是由于加载RequireJS以外的其他原因而定义的。其他加载系统在全局空间定义require
。(控制台中可能会出现一些错误。)
可以使用RequireJS,但不需要在全局空间中定义它通常定义的任何符号。例如,如果站点使用了使用名称空间
选项的优化包,则通常为全局的符号将在该名称空间中定义
另一种情况是,加载优化包并将其配置为不向全局空间泄漏任何内容
您尝试执行的操作的其他问题:
findNestedDependencies
是一个优化器选项,而不是运行时选项。所以它什么也不做
jQuery必须在依赖项中列为jQuery
,因为它在调用define
时会硬编码其名称。如果您需要使用与jquery
不同的名称,则会得到不稳定的行为
您报告的间歇性错误是从两个不同位置获取jQuery的典型情况。除了用RequireJS加载jQuery的代码外,还可以:
a。该站点的代码使用RequireJS加载jQuery
b。站点的代码加载带有
标记的jQuery
c。站点的代码以另一种方式加载jQuery
因为RequireJS是异步的,所以任何依赖于jQuery的代码都可能得到一个jQuery实例,当加载第二个jQuery时,该实例将被覆盖
“我正在尝试一个书签”这是什么意思?您需要更详细地描述使用RequireJS的上下文,因为这看起来不是一个常见的情况。我在我的应用程序中使用RequireJS,一点也不关心bbc.com或fool.com上发生了什么。“我正在尝试制作一个书签”,很抱歉我漏掉了一个单词,希望它现在对你有意义。如果你能突出你不清楚的问题的哪一部分,这会很有帮助,我会为你澄清。无论如何,通过requirejs可靠地注入我的jquery插件?在qtip2initializer中,jay
或store
似乎是其中一个变量未定义。我认为没有一种可靠的方法可以按照您想要的方式(使用bookmarklet)完成它,并让它在一系列网站上运行。至少,在没有对每个站点的工作方式进行重大检查的情况下是如此。我不熟悉浏览器扩展,但这是我将检查做什么你想做的。我相信他们能够将扩展中运行的JavaScript与页面中运行的JavaScript隔离开来。