查找上一页的URL,该页面不在Web历史记录中

时间:2013-04-06 19:50:39

标签: javascript google-chrome-extension

我正在尝试编写与xkcd相关的chrome扩展,我希望能够判断当前页面是否来自random button。遗憾的是,该网址(http://dynamic.xkcd.com/random/comic/)未在网络历史记录中找到,并且不适用于document.referrer。有没有办法获得上一页,即使它不在网络历史记录中?或者有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

我认为这是一个安全限制,您只能访问引荐来源,随机处理服务器端只返回新页面,它是一个功能(可以这么说)而不是您访问过的页面。

我唯一的建议是检查推荐人是否是同一个域(xkcd)但不是连续的网址

即当前网址为xkcd.com/189为referrer / 188或/ 190否则假设为随机

答案 1 :(得分:1)

没有什么能阻止你直接这样做。随机页面是307重定向,由浏览器无形地处理,但您可以使其更加可见。我不知道你想从随机按钮获得的知识是什么,但请考虑以下示例:

<强>的manifest.json

{
  "name": "Chrome webrequest test",
  "version": "0.1",
  "description": "A test for webrequest",
  "manifest_version": 2,
  "permissions": [
    "<all_urls>","webRequest","webRequestBlocking"
  ],
  "background": {
    "scripts": ["bgp.js"],
    "persistent": true
  },
  "content_scripts": [{
    "matches": ["http://xkcd.com/*"],
    "js": ["xkcdInject.js"]
  }]
}

<强> bgp.js

var requestIds = [];

chrome.webRequest.onBeforeRedirect.addListener(function(details){
  requestIds.push(details.requestId);
},
{urls: ["http://dynamic.xkcd.com/random/comic/"]});

chrome.webRequest.onCompleted.addListener(function(details){
  var n = requestIds.indexOf(details.requestId);
  if(n > -1){
    setTimeout(function(){
      chrome.tabs.sendMessage(details.tabId,{random:"true"});
    },1000); 
    requestIds.splice(n,1);
  }
},
{urls: ["http://xkcd.com/*"]},["responseHeaders"]);

<强> xkcdIject.js

chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){
  if(message.random == 'true')
    console.log("This page came from the random button.");
});

在此示例中,它正在侦听随机按钮的使用,然后将此用途的知识发送到相关选项卡。有了这个,你的标签就知道它是否来自随机按钮。