2013-03-14 136 views

回答

0

要做到這一點,最好的方法可能是使用chrome.webRequest在重定向之前獲取舊的引用。

一種方式做到這一點會是這樣:

var requestIds = []; 

chrome.webRequest.onBeforeRequest.addListener(function(details){ 
    var temp = {requestId:details.requestId,url:details.url} 
    requestIds.push(temp); 
}, 
{urls: ["*://www.google.com/url*"]}); 
chrome.webRequest.onBeforeSendHeaders.addListener(function(details){ 
    requestIds.forEach(function(v,i,a){ 
    if(parseInt(details.requestId)-parseInt(v.requestId)<=2){ 
     details.requestHeaders.forEach(function(val,ind,arr){ 
     if(val.name =="Referer") 
      val.value = v.url; 
     }); 
     requestIds.splice(i,1); 
    } 
    }); 
}, 
{urls: ["<all_urls>"],types:["main_frame"]},["requestHeaders","blocking"]); 

您還需要"webRequest","webRequestBlocking"爲您的權限在您的清單文件。

這樣做會取出url,然後將它添加到近似結果調用的請求標頭中。我原本打算說明在重定向過程中requestId保持不變,但它不是傳統的重定向。據我所見,無法將第一個請求與下一個請求相關聯,因爲它將具有非常接近的ID,因此是<= 2。無論您想如何處理它,第一個偵聽器都會爲您提供所需的url,但可能很難將其與生成的頁面關聯。

請注意,儘管這確實會更改引用標頭,但它不會顯示在開發工具中或作爲document.referrer