0

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

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

清单.json:

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

开发工具.html:

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

开发工具.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
    }
  }
);

示例.html:

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

2 回答 2

2

当您刷新页面时,您的自定义面板不会自行刷新。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;
  }
);
于 2014-05-28T14:40:03.850 回答
0

好的,我只是尝试一下。

  1. 保持全局 panel_window 对象。

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

  3. panel_window 分析一些关于间隔事件的数据。


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

于 2013-10-05T04:01:37.593 回答