我怎么能在观看时更新chrome.devtools.panels?

时间:2013-09-28 07:44:56

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

我想在自定义面板中刷新信息。

但观看面板时onShown无法刷新。我怎么能或者......必须在onShow中使用setInterval()?

的manifest.json:

{
  "name": "sample",
  "version": "0.1",
  "manifest_version": 2,
  "devtools_page": "devtools.html"
}

devtools.html:

<html><body><script src="devtools.js"></script></body></html>

devtools.js:

var view_counts = 0;
chrome.devtools.panels.create(
  "sample", "sample.png", "sample.html",
  function(panel){
    panel.onShown.addListener(function(panel_window){
      panel_window.document.getElementById("show_count").innerHTML = view_counts;
      // and moer update.
    });
  }
);
chrome.devtools.network.onRequestFinished.addListener(
  function(entries) {
    if(entries.request.url == "http://example.com/"){
      view_counts++;
      // and more analytics
    }
  }
);

sample.html:

<html><body>count: <div id="show_count">-</div></body></html>

2 个答案:

答案 0 :(得分:1)

刷新页面时,自定义面板不会自行刷新。当自定义面板可见/单击时,也会触发面板的onShown事件。因此,您的代码无法显示刷新信息。

您必须将panel_window引用存储在全局变量中,以便您可以在onRequestFinished事件处理程序中访问该引用以执行所需操作。我已经编辑了您的代码,请在下面查看:

请按以下方式更改您的devtools.js

var view_counts = 0;
var _windowObj;

chrome.devtools.panels.create(
  "sample", "sample.png", "sample.html",
  function(panel){
    panel.onShown.addListener(function tmp(panel_window){
      panel.onShown.removeListener(tmp);
      _windowObj = panel_window;
      _windowObj.document.getElementById("show_count").innerHTML = view_counts;
    });
  }
);

chrome.devtools.network.onRequestFinished.addListener(
  function(entries) {
    if(entries.request.url == "http://example.com/"){
      view_counts++;
    }
    _windowObj.document.getElementById("show_count").innerHTML = view_counts;
  }
);

答案 1 :(得分:0)

哦,我只是试一试。

  1. 保持panel_window对象的全局。

  2. 请求数据在onRequestfinished时写入panel_window的隐藏字段。

  3. panels_window分析间隔事件的一些数据。


  4. 我希望也许有聪明的方法。