【发布时间】:2016-10-29 23:13:11
【问题描述】:
我正在开发一个 Google Chrome 扩展程序,我需要检测重定向,以便我可以执行某个操作(该操作无关紧要,这个问题只是与重定向有关)。到目前为止,我的 background.js 中有这段代码:
chrome.webRequest.onBeforeRedirect.addListener(function (url, tabId) {
console.log("This is a redirect");
chrome.tabs.sendMessage(tabId, {"message": url}, function(response){});
}, {urls: ["<all_urls>"]});
但是,console.log 或 sendMessage 方法都没有被调用。我尝试访问 wikipedia.com、google.net 和其他几个我知道重定向用户的网站。为什么扩展程序不接这个?
(是的,我已将“webRequest”放入我的 manifest.json 文件下的权限中。)
提前致谢,如果您需要其他代码,请告诉我。
编辑:感谢@ze,它现在可以工作了,但现在它工作得有点太了。换句话说,它现在每页开始多次触发,当我开始在 chrome 搜索栏中输入重定向站点的 url 时,它也给了我重定向消息。当我实际按下回车键导航到重定向站点时(而不是在我仍在键入时),我如何让它只触发一次?这是新代码:
chrome.webRequest.onBeforeRedirect.addListener(function (details) {
if(details.frameId === 0){
alert("This is a redirect.");
// chrome.tabs.sendMessage(details.tabId, {"message": details.url}, function(response){});
}
}, {urls: ["<all_urls>"]});
【问题讨论】:
-
我无法立即告诉您它不执行
console.log的原因,但您对处理程序的签名是错误的 - 该事件返回单个details对象。你确定你正在寻找正确的控制台吗?tabs.sendMessage考虑到时间可能毫无意义(标签即将卸载内容脚本或尚未加载新脚本)。 -
您是否在清单文件中声明了主机权限?
-
^ 这可能是答案。您需要为您捕获的 URL 提供主机权限,而不仅仅是
"webRequest"。
标签: javascript google-chrome redirect google-chrome-extension webrequest