我正在尝试编写与xkcd相关的chrome扩展,我希望能够判断当前页面是否来自random button。遗憾的是,该网址(http://dynamic.xkcd.com/random/comic/)未在网络历史记录中找到,并且不适用于document.referrer
。有没有办法获得上一页,即使它不在网络历史记录中?或者有更好的方法吗?
答案 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.");
});
在此示例中,它正在侦听随机按钮的使用,然后将此用途的知识发送到相关选项卡。有了这个,你的标签就知道它是否来自随机按钮。