我想尝试改进 Firefox 控制台弹出网络信息对话框的方式。我试过覆盖:
overlay chrome://browser/content/NetworkPanel.xhtml chrome://devtooltweaks/content/netWinOverlay.xul
但它似乎不起作用。我查看了源代码,该文件看起来没有显示元素的代码,必须是另一个表单调用它。我想知道是否有一种简单的方法可以从 Firefox 扩展向这个弹出窗口添加功能?
- 更新 -
我在 NetworkPanel.jsm 中找到了一些相关代码:
// Set the document object and update the content once the panel is loaded.
this.iframe.addEventListener("load", function onLoad() {
if (!self.iframe) {
return;
}
self.iframe.removeEventListener("load", onLoad, true);
self.update();
}, true);
不幸的是,似乎没有任何简单的方法可以从插件代码创建这样的侦听器。我尝试使用 store-original-function-and-replace 技巧,它运行,但它似乎并没有以某种方式在正确的上下文中调用原始函数:
<?xml version="1.0" encoding="utf-8"?>
<overlay id="helloworldOverlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script>
var origOpenNetPanel = WebConsoleFrame.prototype.openNetworkPanel;
WebConsoleFrame.prototype.openNetworkPanel = function WCF_openNetworkPanel(aNode, aHttpActivity) {
//Run the original, in its natural ('this') environment:
var netPanel = origOpenNetPanel.call(this, aNode, aHttpActivity);
//todo: add modification.
return netPanel;
}
</script>
</overlay>
^ 我最初尝试过.call(WebConsoleFrame
和.call(WebConsoleFrame.prototype
。通常这应该可以工作,可能是chrome代码中的一些特殊情况?
上面的代码正在使用此叠加层:
overlay chrome://browser/content/devtools/webconsole.xul chrome://devtooltweaks/content/netWinOverlay.xul