2011-10-28 18 views
3

JSファイルに特定のバグを持つウェブサイトがあります。 JSファイルは1か所だけで参照されています。Chrome拡張 - .jsファイルをオーバーライド

<script type="text/javascript" charset="utf-8" src="/r/js/no-closure/dialogs.js?v=2"></script> 

JSファイルをダウンロードしてバグを修正しました。 Chromeの拡張機能を使用して/r/js/no-closure/dialogs.jsを私のdialogs_fixed.jsで上書きできる方法はありますか?

私は(background.jsで)試してみた:

var script = $('[src*="dialogs.js"]'); 
script.attr("src", "dialogs_patch.js"); 

ありません運を。

答えて

4

あなたは、実験webRequest APIでそれを阻止することができるはずです。

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

実験は終了したので、あなたの答えを更新してください。 – Xan

5

あなたはあなただけbeforeloadイベントを使用することができ、このための実験WebRequestクラスを使用する必要がいけません。このような 何かが 。....で自分の興味のあるページをコンテンツターゲティングスクリプトでその..put

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_at" : "document_start" 

... ....

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

EDIT また、Chrome 17の時点でウェブリクエストapiは実験的なものではなく、リダイレクトするのに最適です。

+0

「beforeload」イベントは、Webkitブラウザ(Chrome、Safari)でのみサポートされていることに注意してください:https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/MessagesandProxies/MessagesandProxies.html#//apple_ref/doc/uid/TP40009977-CH14-SW9(「不要なコンテンツをブロックする」をご覧ください) – BeauCielBleu

+0

Firefoxの代替手段があります:http://webmynd.wordpress.com/2011/04/04/equivalent-to-beforeload-event- for-firefox-extensions/ – BeauCielBleu

+2

編集:「beforeload」イベントがChromeから削除されました:(https://code.google.com/p/adblockforchrome/issues/detail?id=6596) – BeauCielBleu