【问题标题】:Load local versions of the JS libraries hosted on a CDN加载托管在 CDN 上的 JS 库的本地版本
【发布时间】:2014-11-29 19:05:17
【问题描述】:

我想制作一个加载我本地 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');

【问题讨论】:

    标签: javascript firefox-addon crossrider


    【解决方案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 的员工]

    【讨论】:

    • 谢谢!另外,如果我要尝试src: 'jquery.min.js', local: 'local/jquery-2.1.1.min.js' 使其适用于更多案例,可以吗?
    • 如何选择使用 src 完全取决于您。该示例只是为了让您了解如何实现目标。实际实施取决于您。例如,您可以选择使用比显示的更复杂的测试条件来查看 src 是否与请求的 URL 匹配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 2012-05-28
    • 2021-11-22
    • 1970-01-01
    相关资源
    最近更新 更多