回答

9

你可以做到這一點使用webRequest功能,後臺頁面和自定義頁面沒有按鈕。例如,寫在後臺頁面類似的東西:

var URLStorage; 

function interceptRequest(request) 
{ 
    if(request && request.url) 
    { 
    if(request.type == "main_frame") // new page/site is loading in main window 
    { 
     if(request.url.indexOf("wikipedia.org") > -1) 
     { 
     URLStorage = request.url; 
     return {redirectUrl: chrome.extension.getURL("confirmation.html")}; 
     } 
    } 
    } 
} 

chrome.webRequest.onBeforeRequest.addListener(interceptRequest, {urls: ["*://*/*"]}, ['blocking']); 

這個例子,如果維基百科中提到的域不嚴格檢查,但我這樣做是爲了便於說明。在我的真實代碼中,使用了一個特殊的類「URL」,用於解析傳遞的url併爲其每個部分提供屬性,因此可以選擇性地檢查它們。

confirmation.html只需放置2個按鈕,並將它們綁定到適當的代碼,例如重定向到請求的站點,如果用戶回答「是」。

$('#okbutton').click(function() 
{ 
    document.location.href = chrome.extension.getBackgroundPage().URLStorage; 
}); 

不要忘記提「的WebRequest」和「webRequestBlocking」在您的清單中permissions部分。

-2

您可以創建注入javascript代碼到每個網頁的用戶訪問內容的腳本。在您的內容腳本中,您可以讓js檢查當前的url與無效的url,並相應地重定向它們。

我認爲內容腳本在頁面加載後加載,因此用戶可能會看到他們正在查找的頁面並將其重定向到目標頁面。點擊這裏,查看內容腳本文件: http://developer.chrome.com/extensions/content_scripts.html

{ 
    "name": "My extension", 
    ... 
    "content_scripts": [ 
    { 
     "matches": ["http://www.google.com/*"], 
     "css": ["mystyles.css"], 
     "js": ["jquery.js", "myscript.js"] 
    } 
    ], 
    ... 
} 

「匹配」你應該做類似的東西數組

"matches": ["http://www.*.com/*", "http://*.com/*, "https://www.*.com/*", "https://*.*.com/*] 

和「JS」將是您的JavaScript文件的名稱,你想用來將注入寫入頁面。

類似:

if(window.location == "http://wikipedia.com"){ 
    window.location.href = "http://mysplashpage.com"; 
} 

當然,這js的不會在所有情況下工作,例如,如果用戶試圖獲得對目標網站的目錄。你可能會需要一些正則表達式的檢查或一些其他功能,如協議和主機如下定義:http://css-tricks.com/snippets/javascript/get-url-and-url-parts-in-javascript/

+3

您的匹配模式都不是有效的。閱讀[documentation](http://developer.chrome.com/extensions/match_patterns.html)。我建議使用''run_at「:」document_start「',以便重定向在頁面呈現之前發生。 –

相關問題