我正在尝试构建一个常规的Chrome浏览器扩展程序( NOT 一个devtool扩展程序),当在特定页面上激活时,会获得从中请求资源的所有IP的列表。我知道如何通过调用devtools_page中的chrome.devtools.network.getHAR()从HAR日志中获取此列表,然后将HAR日志发送到后台脚本。但是,您只能在devtools页面中调用chrome.devtools。*,该页面仅存在于浏览器中的开放式devtools窗口的生命周期内。我不想在devtools.js中打开devtools只是为了调用这个函数。有没有办法调用chrome.devtools。*例如来自background.js而无需在浏览器中打开devtools?
现在发生了什么:
// background.js
chrome.runtime.onConnect.addListener(function(port) {
console.assert(port.name == "somePort");
port.onMessage.addListener(function(msg) {
console.log(msg.content);
});
});
,
// devtools.js
chrome.devtools.network.getHAR(function(harLog) {
var port = chrome.extension.connect({name: "somePort"});
port.postMessage({content: harLog});
});
,
//manifest.json
"devtools_page": "devtools.html",
"background": {
"scripts": [
"background.js"
],
"persistent": false
}
答案 0 :(得分:1)
不幸的是,there is no way to access to chrome.devtools.*
api without opening up devtools window.
.on('mouseleave.fndtn.dropdown', '[data-dropdown], [data-dropdown-content]', function (e) { var $this = $(this); self.timeout = setTimeout(function () { if ($this.data('dropdown')) { var settings = $this.data('dropdown-init'); if (settings.is_hover) self.close.call(self, $('#' + $this.data('dropdown'))); } else { var target = $('[data-dropdown="' + $(this).attr('id') + '"]'), settings = target.data('dropdown-init'); if (settings.is_hover) self.close.call(self, $this); } }.bind(this), 150); })
API模块仅可用于DevTools窗口中加载的页面。内容脚本和其他扩展页没有这些API。因此,API仅在DevTools窗口的生命周期内可用。