有没有办法在浏览器中替换Javascript库链接?

时间:2016-07-27 11:56:43

标签: javascript html5 browser

这是我的问题。

我需要连接到网络上的外部网站(不是我的网站)。它的大多数依赖项都在同一个域中(/ assets / ...)。但他们在CDN中放置了2个资源(此处为Cloudflare)。

但由于防火墙限制,我无法从此CDN加载。但是,不禁止库(与JQuery相关)。

是否有技术方法在运行时替换此链接以引用这些库的更易于访问的位置?

1 个答案:

答案 0 :(得分:0)

方法#1

假设您的计算机上运行了本地Web服务器,可能的hack可能是编辑您的hosts文件,以便被阻止的域指向您的localhost:

127.0.0.1  www.a-blocked-domain.com
127.0.0.1  a-blocked-domain.com

如果你无论如何都无法访问它们,那不应该太有害。

(您可能需要一些mod_rewrite指令,这样您就不必复制原始主机用于提供这些文件的完整路径。)

方法#2

在评论中详细说明Simon的建议:如果你可以在加载DOM之后以某种方式控制,这里有一些实验性的(并且经过测试的)代码可以尝试在控制台中运行。

这可能在页面完全加载后也可以工作,但您可能必须手动启动一些应该在onDOMReadyonContentReady被触发时执行的代码片段。< / p>

var scriptList = document.getElementsByTagName('script'),
    hostList = [
      { 'source': 'a-blocked-domain.com', 'target': 'the-appropriate-domain.com' }
    ];

Array.prototype.slice.call(scriptList).forEach(function(s) {
  var node, script, host = getHostname(s.src);

  if(node = hostList.find(function(h) {
    return h.source == host;
  })) {
    script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = s.src.replace(host, node.target);
    document.getElementsByTagName('head')[0].appendChild(script);
  }
});

function getHostname(url) {
  var a = document.createElement('a');
  a.href = url;
  return a.hostname;
}