我正在开发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以及其他一些我知道重定向用户的网站。为什么扩展无法解决这个问题?
(是的,我已将&#34; webRequest&#34;放在我的manifest.json文件下的权限中。)
如果您需要任何其他代码,请提前致谢。
编辑:感谢@ze现在正在工作,但是现在它已经很好地工作了。换句话说,它现在每页开始多次启动,当我开始在Chrome搜索栏中键入重定向站点的URL时,它也会给我重定向消息。当我实际按下Enter键以导航到重定向站点时(而不是在我还在键入时),我怎么才能触发它?这是新代码: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>"]});
答案 0 :(得分:2)
从我可以看到,onBeforeRedirect的回调有两个参数,而here表示回调应该有一个参数:$pdf = $client->convertFile("/path/to/MyLayout.html");
。然后,您可以使用details
(或details.url
,如果您需要新网址)和details.redirectUrl
访问网址和tabId。
此外,选项卡内的框架也可能会重定向,因此事件可能会多次触发。如果代码必须仅在主框架重定向时运行,则应添加如下的检查:
details.tabId
另外,我不确定你为什么在if (details.frameId == 0){
//Your code here
}
函数的参数中有{urls: ["<all_urls>"]}
。唯一的争论是回调。
所以,我会写一些类似的东西:
addListener
让我知道这是否成功。