我正在尝试编写与 xkcd 相关的 chrome 扩展,并且我希望能够判断当前页面是否来自random button。不幸的是,该 URL ( http://dynamic.xkcd.com/random/comic/ ) 未在网络历史记录中找到,并且不适用于document.referrer
. 有没有办法获取上一页,即使它不在网络历史记录中?还是有更好的方法来做到这一点?
问问题
103 次
2 回答
2
我认为这是一个安全限制,您只能访问引荐来源网址,并且随机处理服务器端仅返回新页面,它是一个功能(可以这么说)而不是您访问过的页面。
我唯一的建议是检查引荐来源网址是否是同一个域(xkcd)但不是一个连续的 url
即当前网址是 xkcd.com/189 是推荐人 /188 或 /190 否则假设它是随机的
于 2013-04-06T19:55:46.330 回答
1
没有什么可以阻止您直接执行此操作。随机页面是一个307
重定向,它由浏览器无形地处理,但您可以使其更加可见。我不确定你想用它来自随机按钮的知识做什么,但请考虑以下示例:
清单.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.");
});
在此示例中,它正在侦听随机按钮的使用,然后将有关此使用的知识发送到相关选项卡。有了这个,你的标签就知道它是否来自随机按钮。
于 2013-04-06T21:03:13.990 回答