我的DevTools扩展将脚本注入到检查窗口中,以便解析和接收消息--通常是在页面加载时,但也是在第一次打开DevTools时。
背景页中的相关行如下:
chrome.tabs.executeScript(message.tabId,{ file: 'insert.js', runAt: 'document_idle' },function(results){console.log(results);});
这一行通常在后台控制台成功时显示[null]
--并且在以停靠状态打开DevTools时,以及当用户在任何状态下导航到具有DevTools的新URL时,都是成功的。只有当DevTools处于非停靠状态打开时,它才不能工作;在这种情况下,调用正在悄然失败,而results
正在返回undefined
。
权限是“选项卡”、"““、”““;再说一遍,它只在这一种非常特殊的情况下不起作用。
这是一个已知的问题,解决办法,还是我应该认为这是一个铬缺陷?
发布于 2014-04-12 07:14:56
你的窃听器报告的测试用例包含一个错误。
事件页面中的onMessage
事件侦听器期望选项卡ID可用为message.tabId
chrome.tabs.executeScript(message.tabId,{ file: 'insert.js', runAt: 'document_idle' });
然而,在devtools页面中,消息被发送为"tabID“(注:大写D)。
chrome.runtime.sendMessage({type: 'newpageload',tabID: chrome.devtools.inspectedWindow.tabId});
由于message.tabId
在事件页中未定义,Chrome默认将内容脚本插入到电流窗的active选项卡中。当开发人员工具被卸载时,此选项卡(巧合地)与检查的选项卡相同,因此您没有注意到错误。
当devtools被卸载时,当前窗口是devtools。由于您不能编写开发工具的脚本,因此似乎不会发生任何事情。如果在回调的chrome.runtime.lastError
中读取chrome.tabs.executeScript
的值,就会注意到您试图在错误的窗口中插入脚本。
将"tabID“更改为"tabId”后,测试用例将按预期工作。
https://stackoverflow.com/questions/23020324
复制