2015-01-20 93 views
0

我正在編寫一個Chrome擴展,用於停止特定網站的頁面加載。我這樣做的方式是我的內容腳本獲得的注入頁面,並呼籲Javascript停止窗口加載後顯示一些內容

window.stop() 

這工作正常,我看到一個空白的白色網頁。我現在想在這個空白的白頁上顯示一條自定義消息,我該怎麼做。

這是我到目前爲止已經試過,調用window.stop()我有這樣的行後:

document.body.innerHTML += '<div style="position:absolute;width:100%;height:100%; z-index:100;background:#000;"></div>'; 

但它拋出

Uncaught TypeError: Cannot read property 'innerHTML' of null 

我檢查了DOM和它的錯誤身上有標籤。我不確定什麼是錯的。

+1

使用'webRequest'重定向到擴展中的頁面比使用內容腳本更好。 – Xan 2015-01-20 19:00:32

+0

不知道webRequest,它絕對看起來很有趣,你能寫一小段代碼來證明它在這種情況下的使用嗎? – sublime 2015-01-20 19:11:56

回答

2

我假設你通過document_start注入內容腳本,並決定是否有阻止屏蔽網站。

更好的方法是完全取消初始請求,並將其重定向到您自己的錯誤頁面。

webRequest API能做到這一點:

chrome.webRequest.onBeforeRequest.addListener(
    function(details) { 
     if(/* condition based on details */) { 
     // The file might need to be in web_accessible_resources 
     return {redirectUrl: chrome.runtime.getURL("my_error.html")}; 
     } 
    }, 
    {urls: ["<all_urls>"], types: ["main_frame"]}, 
    ["blocking"] 
); 

注:這將呼籲每一個導航請求你的測試代碼;這可能會減慢速度。如果您有特定的網站列表,您可以將它們放在過濾器的urls參數中以獲得更好的性能。

您將需要涵蓋要阻止的站點的主機權限(或"<all_urls>",如果您可能需要全部),則需要"webRequest""webRequestBlocking"

1

您可以隨時使用window.document.write()。

你的代碼看起來像......

document.write("<div style='position:absolute;width:100%;height:100%; z-index:100;background:#000;'></div>")