我的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
。
权限是“标签”,“http:// / ”,“https:// / ”;而且,它只是在这个非常具体的情况下才起作用。
这是一个已知问题的解决方法,还是我认为这是一个Chromium错误?
答案 0 :(得分:0)
your bug report的测试用例包含拼写错误。
事件页面中的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默认将内容脚本插入current window的有效标签中。当开发人员工具未对接时,此选项卡(巧合地)与检查的选项卡相同,因此您没有注意到错误。
当devtools解除对接时,当前窗口是devtools。由于您无法编写开发人员工具的脚本,因此似乎没有任何内容。如果您在chrome.runtime.lastError
的回调中读取chrome.tabs.executeScript
的值,您会注意到您正在尝试在错误的窗口中插入脚本。
更改" tabId"到" tabID",测试用例按预期工作。