2013-03-14 113 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