Javascript requirejs:在不同的站点上不一致地加载库

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.

我试图通过require.js加载store.js时遇到了一些问题,结果是每个站点的结果都不一样(我尝试使用bookmarklet)。我正在使用这里的站点列表

bbc.com和fool.com起作用,但其他的(,)是不一致的。例如,有时候jquery不可用,有时候qtip不可用,有时候store不可用

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隔离开来。