0

例如,您在 google.com 中搜索某些内容。您单击结果链接,然后您将被重定向到“ https://www.google .....”然后到正确的站点。我怎样才能得到我来到正确的网站后的网址(' https://www.google .....')。

document.referrer

无能为力。它只给出“ https://www.google.com/ ”,而我想获得完整的网址。

4

1 回答 1

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.

于 2013-03-14T19:08:26.950 回答