加载CDN上托管的JS库的本地版本

时间:2014-10-05 07:49:42

标签: javascript firefox-addon crossrider

我想创建一个加载我的本地JS库而不是CDN托管的库。例如,加载我自己在此处托管的脚本版本https://developers.google.com/speed/libraries/devguide?csw=1#Libraries

我想到的一种方法是收听所有请求,例如以下示例,但我不知道如何告诉浏览器加载本地版本的库。

appAPI.onRequest(function(resourceUrl, tabUrl) {

  if (resourceUrl.match(/.*/)) {
  //Load the local version of the libraries used by the website

  }
});

我也发现了类似于我想在演示版中做的事情,但我不知道这是否是一个可行的选择。

appAPI.resources.addInlineJS('Resources/jquery-2.1.1.min.js');

1 个答案:

答案 0 :(得分:1)

您对如何实现目标有正确的认识。原则上,您可以使用appAPI.webRequest.onRequest方法来阻止页面资源并在其位置注入您自己的版本。存在潜在的副作用,例如页面加载脚本不按顺序可能会影响其整体功能。

以下代码按原样提供,未经过测试。 另请注意,在Internet Explorer上,如果本地库由于其最大字符串长度而较长,则该解决方案可能无效。

<强> background.js

// Monitor page resource requests
appAPI.webRequest.onRequest.addListener(function(details, opaque) {\
    // Check if the request is for loadable local resource
    for (var i = 0; i < opaque.resource.length; i++) {
        if (details.requestUrl.indexOf(opaque.resource[i].src) !== -1) {
            // Load local resource
            appAPI.resources.addInlineJS(opaque.resource[i].local);
            // Block original request
            return {
                cancel: true
            };
        }
    }
}, {
    resource: [ // List of loadable local resources
        {
            src: '//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js',
            local: 'local/jquery-2.1.1.min.js'
        }
    ]
});

[披露:我是Crossrider员工]