我有一个简单的扩展程序,它使用devtools页面提供调试功能。单击browserAction图标后,该页面将在当前选项卡中插入内容脚本。如何将内容脚本中的DOM节点(或nodeId)传递回devtools页面,以便可以在其上调用inspect()
?
manifest.json包含:
"devtools_page": "devtools.html"
devtools.html包含:
<script src="devtools-script.js"></script>
devtools-script.js:
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(tab.id, {
file: 'js/content.js'
}, function () {
chrome.devtools.inspectedWindow.eval('window.searchedElement', {
useContentScriptContext: true
}, function (result) {
console.log('resulting element:', result);
});
});
});
content.js:
window.searchedElement = document.body;
(我使用document.body
来简化示例)
现在,当我导航到页面时,打开DevTools并单击扩展名,会发生以下情况:
eval()
以返回先前由内容脚本设置的元素devtools-script生成的日志为:
结果元素:{}
因此,显然您不能轻松地传递该节点。我也许可以在内容脚本中为元素提供id
属性,然后在devtools页面中对其进行查询,但这似乎很笨拙。
是否有更好的方法可以从devtools页面访问已检查窗口中的元素?