2011-10-28 221 views
3

有一個網站在JS文件中有一定的錯誤。 JS文件只在一個地方被引用:Chrome擴展程序 - 覆蓋.js文件

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

我已經下載了JS文件並修正了錯誤。有沒有辦法通過Chrome擴展程序,用我的dialogs_fixed.js覆蓋/r/js/no-closure/dialogs.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

你不需要使用實驗的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); 

..put,在一個內容腳本針對頁面您感興趣的內容。 並確保您對此內容腳本加載的頁面不會加入之前.. 。

"run_at" : "document_start" 

...您的內容腳本場....

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

編輯 雖然需要注意的是,從Chrome 17開始,web請求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

編輯:從Chrome瀏覽器中刪除「beforeload」事件:(https://code.google.com/p/adblockforchrome/issues/detail?id=6596 – BeauCielBleu