Chrome扩展程序 - 覆盖.js文件

Ent*_*ity 5 google-chrome-extension

有一个网站在JS文件中有一个错误.JS文件仅在一个地方被引用:

    <script type="text/javascript" charset="utf-8" src="/r/js/no-closure/dialogs.js?v=2"></script>
Run Code Online (Sandbox Code Playgroud)

我已经下载了JS文件并修复了错误.有什么方法可以通过镀铬扩展覆盖/r/js/no-closure/dialogs.js我的dialogs_fixed.js

我试过(in background.js):

var script = $('[src*="dialogs.js"]');
script.attr("src", "dialogs_patch.js");
Run Code Online (Sandbox Code Playgroud)

没运气.

PAE*_*AEz 6

你不需要使用实验性的webRequest,你可以使用beforeload事件.像这样的东西应该工作....

String.prototype.endsWith = function(pattern) {
    var d = this.length - pattern.length;
    return d >= 0 && this.lastIndexOf(pattern) === d;
};

document.addEventListener('beforeload', function(event) {
if (event.url.endsWith("/r/js/no-closure/dialogs.js?v=2")){event.srcElement.src=chrome.extension.getURL("dialogs.js");}
}, true);
Run Code Online (Sandbox Code Playgroud)

..在内容脚本中输入您感兴趣的页面.并确保在页面添加之前加载此内容脚本...

"run_at" : "document_start"
Run Code Online (Sandbox Code Playgroud)

...到您的内容脚本字段....

http://code.google.com/chrome/extensions/content_scripts.html

编辑 Altho应该注意的是,从Chrome 17开始,Web请求api不再是实验性的,是进行重定向的好方法.

  • 修改:从chrome中删除了"beforeload"事件:( https://code.google.com/p/adblockforchrome/issues/detail?id=6596 (2认同)

ser*_*erg 5

你应该能够用实验webRequestapi 阻止它:

chrome.experimental.webRequest.onBeforeRequest.addListener(function(details) { 
    return {cancel: true}; 
}, {urls: ["http://www.example.com/r/js/no-closure/dialogs.js"]}, ["blocking"]);
Run Code Online (Sandbox Code Playgroud)