2013-07-30 50 views
5

Google Chrome浏览器扩展程序API使用chrome.devtools.inspectedWindow提供有关当前打开的窗口的信息,但它不提供更改时的事件。我可能会刷新或重定向页面,我希望我要添加的DevTools面板得到通知。有没有一种方法呢?chrome.devtools.inspectedWindow更改事件

想想元素面板,它始终保持与当前DOM最新。这可能很难实现,以便像DOM一样保持最新状态,每当发生DOM突变时,但至少在加载新页面时通知我(至少在document.onload事件中,为什么不) )

关于如何实现这一点的任何想法,谢谢?

回答

10

每当更新发生时,收听chrome.webNavigation事件和notify devtools事件之一。

另一种检测被卸载页面的方法是使用chrome.devtools.network.onNavigated事件(仅在devtools扩展页面中可用)。

+0

好的,感谢给我带领,这里是我想要构建的更加狭义的解释,也许你可以更多地指出正确的API方法,因为背景,页面和devtools脚本之间的消息可能会很棘手。我想基于来自使用某个JS框架的页面的一些全局变量来显示一些统计数据。所以我需要访问我的devtools页面中当前打开的页面的运行时JS变量。这可能吗?谢谢 – treznik

+1

是的,这是可能的。我建议添加一个按钮,以便用户可以手动触发代码(检查全局变量)。我已经链接的API足以让你开始。让我知道你什么时候卡住了。 –

+0

好的,我设法通过后台脚本将chrome.webNavigation.onCompleted处理程序绑定到独立的devtools面板。到目前为止这么好,但是我如何从https://developer.chrome.com/extensions/webNavigation.html#event-onCompleted的基本'details'参数中获取该选项卡的全局变量?谢谢 – treznik

4

我遇到了同样的挑战,这是我在Google中发现的唯一结果,所以我想用我找到的解决方案回答。关键不在于chrome.devtools.inspectedWindow,而是在chrome.tabs.onUpdated。事实上,我发现chrome.tabs.*通常更有用。以下是我用来从我的扩展中查看状态更改的代码;

chrome.tabs.onUpdated.addListener(function (tabId, changes, tabObject) { 
    console.log("Status of", tabId, "is", changes.status); 
    if (changes.status == "complete") { 
    console.log("Tab Load Complete"); 
    } 
}); 

您也可以使用chrome.tabs.* API检查状态变化是否发生了当前标签页或不上。

+1

您不能在devtools页面中使用chrome.tabs代码,这是OP要求的地方。 我不会让你失望,因为看起来有些人明显地发现你的解决方案很有用,但我怀疑他们是在试图制作一个Devtools面板。 – WORMSS