1

我試圖創建一個Chrome擴展程序,該擴展程序利用Chrome的webRequest模塊執行重定向到從最初訪問的URL獲取的URL。爲此,我只想使用Chrome的webRequest函數(例如,onBeforeSendHeaders,onHeadersReceived),而不是簡單地使用獲取的URL執行對$ .ajax()的調用。所希望的功能是:收到回覆後使用Chrome瀏覽器網址轉發網址

  1. 用戶在地址欄中輸入URL
  2. 的請求是由與二次URL被從HTTP響應
  3. 萃取chrome.webRequest.onHeadersReceived處理程序使用用戶重定向到該二次URL阻塞響應的redirectUrl屬性。

我在完成這個嘗試是:

chrome.webRequest.onHeadersReceived.addListener(
function(details){ 
    var secondaryURL = extractSecondaryURL(details); 
    return {redirectUrl: secondaryURL}; //this doesn't work 
}, 
{urls:["http://*/*", "https://*/*"]}, 
["blocking","responseHeaders"] 
); 

...但頁面不會被轉接。 webRequest文檔說:「僅用於響應onBeforeRequest事件。」關於redirectUrl屬性,這是可能的罪魁禍首。

如何使用從響應頭和Chrome webRequest模塊接收的數據執行此類轉發?

+0

「onHeadersReceived」中的'redirectUrl'已請求https://code.google.com/p/chromium/issues/detail?id=280464。請明星問題! –

回答

2

web request API方法

所以,想法是存儲來自onHeadersReceived事件的輔助URL並觸發一個事件,該事件再次觸發onBeforeRequest事件,這有助於重定向。

示例演示

下面未經測試的:)示範阻止所有Facebook的URL以及在接收到輔助URL其重定向到Google,您可以進一步自定義它。

參考

manifest.json

確保所有可用權限和用擴展名註冊後臺頁面。

{ 
    "name": "Hanlder for Navigation", 
    "description": "http://stackoverflow.com/questions/16928912/url-forwarding-using-chrome-webrequest-after-response-is-received", 
    "version": "1", 
    "manifest_version": 2, 
    "background": { 
    "scripts": ["background.js"] 
    }, 
    "permissions":["https://www.facebook.com/*","webRequest","webRequestBlocking","tabs"] 
} 

background.js

這個代碼塊的所有URL請求Facebook,並將其重定向到Google

var _redirectURL = ""; 
// Register an event listener which 
//traces all requests before being fired 
chrome.webRequest.onBeforeRequest.addListener(function (details) { 
    if (_redirectURL != "") { 
     return { 
      redirectUrl: "http://www.google.co.in/" /*Redirection URL*/ 
     }; 
    } 
}, { 
    urls: ["*://www.facebook.com/*"] /* List of URL's */ * * 
}, ["blocking"]); // Block intercepted requests until this handler has finished 
chrome.webRequest.onHeadersReceived.addListener(function (details) { 
    if (_redirectURL == "") { 
     var secondaryURL = extractSecondaryURL(details); 
     _redirectUrl = secondaryURL; 
     chrome.tabs.reload(); 
    } 
}, { 
    urls: ["http://*/*", "https://*/*"] 
}, ["blocking", "responseHeaders"]); 

Output

所有請求(多個)Facebook被重定向到Google

+2

此方法存在一些小缺陷,因爲它會爲所有請求重新加載整個選項卡(包括** frames **和images/stylesheets/scripts/...中的請求)。 –

+0

是的,這可以通過設置從tabs.reload()方法回調的tabID稍微改進。 – ncla

+4

我只是試過這個例子,但我不能讓它重定向。我在控制檯中看到沒有錯誤。有什麼我可能會失蹤? – user1513388