例如,您在 google.com 中搜索某些内容。您单击结果链接,然后您将被重定向到“ https://www.google .....”然后到正确的站点。我怎样才能得到我来到正确的网站后的网址(' https://www.google .....')。
document.referrer
无能为力。它只给出“ https://www.google.com/ ”,而我想获得完整的网址。
例如,您在 google.com 中搜索某些内容。您单击结果链接,然后您将被重定向到“ https://www.google .....”然后到正确的站点。我怎样才能得到我来到正确的网站后的网址(' https://www.google .....')。
document.referrer
无能为力。它只给出“ https://www.google.com/ ”,而我想获得完整的网址。
执行此操作的最佳方法可能是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
.