2012-01-25 136 views
1

我試圖設置一個類似於http://code.google.com/chrome/extensions/trunk/samples.html#webrequest的Chrome擴展,不同之處在於,當get請求由於任何原因失敗時,它會使用onErrorOccurred偵聽器而不是重定向到特定的已知頁面。Chrome擴展API v17:webRequest onErrorOccurred.addListener

manifest.json的:

{ 
    "name": "Custom Error", 
    "version": "0.1", 
    "description": "Redirect all navigation errors to specified location/file.", 
    "permissions": [ 
    "webRequest", 
    "tabs", 
    "<all_urls>" 
    ], 
    "background": { 
    "page": ["error_listener.html"] 
    } 
} 

error_listener.html:

<!doctype html> 
<script> 
    chrome.webRequest.onErrorOccurred.addListener(
     function onErrorOccurred(details) { 
     console.log('onBeforeRequest ', details.url); 
     return { redirectUrl: 'http://www.google.com' } 
     }, 
     {urls: ["<all_urls>"]} 
     //{urls: ["http://*/*", "https://*/*"]} 
); 
     //chrome.tabs.update(details.tabId, {url: "http://www.google.com", ['blocking']}); 
     //alert("what?"); 
</script> 

擴展負載不表示任何錯誤但瀏覽器選項卡不重定向。我曾試過使用Chrome 16和Chrome 17;使用Chrome 16的時候,我沒有改變「chrome.webRequest」到「chrome.experimental.webRequest」,並增加「實驗性」的權限列表。

到目前爲止,好像問題是,當該擴展程序出現在看鑲邊時要加載://擴展,文件沒有實際加載 - 使用開發工具的時候,我沒有看到任何參考error_listener.html。

我也曾嘗試運行Chrome 17以下標誌:

8611 25/01/12-11:22:05> google-chrome --restore-last-session 
--debug-on-start --log-level=0 --enable-logging 
--enable-extension-activity-logging --enable-extension-alerts 
--debug-plugin-loading --debug-print | tee > log1.txt 

很顯然,我只是那種戳在與命令行黑暗各地。任何人有任何線索如何得到這個工作?在此先感謝您的幫助!

回答

1

在Chrome中16,你應該使用:

"background_page": "background.html" 

而不是

"background": { 
    "page": ["error_listener.html"] 
} 

這解決了後臺頁面沒有加載的問題。看起來這可能在trunk docscurrent docs相比發生了變化,我不確定哪個版本的Chrome開始實施新的manifest.json格式。

+0

謝謝,這解決讓網頁加載的問題(現在有「考察活動的意見」爲選項擴展名爲chrome:// extensions),現在我只需要調試javascript :) – waynr

2

沒有webRequest.onErrorOccurred事件。您可以使用webNavigation.onErrorOccurred。如果你想趕上DNS錯誤並重定向到另一個網址,你可以使用代碼:

<script> 
chrome.webNavigation.onErrorOccurred.addListener(function(details) 
{ 
    if (details.frameId != 0) //ignore subframes. 0 is main frame 
    { return; } 

    chrome.tabs.update(details.tabId, {url: "https://www.google.com/search?q=" + details.url}); 
}); 
</script>