2016-04-15 56 views
1

我正在爲this站點寫入擴展。在我的注入腳本(注入使用chrome.tabs.executeScript)運行在「document_end」似乎一切正常,但我想刪除網站的「警報」提示。無法替換注入腳本中的警報

要做到我放在這個代碼中注入腳本,但它不工作:

window.alert = function(msg){ 
    console.log("bypassed"); 
} 

也試過這是由注入的腳本:

$('<script>window.alert = function (msg){}</' + 'script>').appendTo(document.body); 

我甚至已經試過這在後臺頁面中,但這也不是:

chrome.tabs.executeScript({ 
       code: 'window.alert=function(msg){}' //while alert("hello") works 
      }); 

我在想什麼?我爲另一個站點編寫了另一個擴展,並且此方法確實覆蓋了alert函數。

更新:我無法從注入的腳本中調用從內容腳本調用時發生的下載網頁中的本機函數。但我注入的腳本使用chrome.tabs.executeScript

+0

當您檢查頁面上的擴展名時,您的腳本是否成功添加? –

+0

@NoamHacker是的,這是肯定的。 – user5858

+0

您是否嘗試過[此答案](http://stackoverflow.com/a/1729684/4926817)使用的代理模式? –

回答

0

我猜你的問題是與你的manifest.json文件,你指定爲"run_at": "document_end"

documentation

在「document_start」的情況下,將文件從CSS的任何文件後注射,但建造任何其他DOM之前或任何其他腳本運行。

但是,

在「document_end」的情況下,這些文件被立即注射後的DOM完成,但像圖像和幀子資源已加載之前。

引用this answer,在document_end的情況下,作爲功能已經加載的覆蓋不能發生,因此,你應該有JavaScript的在document_start注入。