如何在常规chrome扩展中调用chrome.devtools。* api调用,而无需在浏览器中打开devtools

时间:2016-08-03 03:24:38

标签: javascript google-chrome google-chrome-extension google-chrome-devtools

我正在尝试构建一个常规的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
 }

1 个答案:

答案 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窗口的生命周期内可用

相关问题