gpt4 book ai didi

javascript - Firefox 附加组件 window.addEventListener 错误 : window not defined

转载 作者:行者123 更新时间:2023-11-28 01:28:33 24 4
gpt4 key购买 nike

我正在尝试按照本教程创建一个 Firefox 插件,该插件会在地址栏中的 url 更改时进行拦截:

https://developer.mozilla.org/en-US/Add-ons/Code_snippets/Progress_Listeners#Example:_Notification_when_the_value_in_Address_Bar_changes

我刚刚复制了代码,并添加了一个警报以查看它是否有效,但我无法让它以任何方式运行。

我的代码是:

const {Cu} = require("chrome");
Cu.import("resource://gre/modules/XPCOMUtils.jsm", this);

var urlListener = {
oldURL: null,

init: function() {
gBrowser.addProgressListener(this);
},

uninit: function() {
gBrowser.removeProgressListener(this);
},

processNewURL: function(aURI) {
if (aURI.spec == this.oldURL) return;

// now we know the url is new...
alert(aURI.spec);
this.oldURL = aURI.spec;
},

// nsIWebProgressListener
QueryInterface: XPCOMUtils.generateQI(["nsIWebProgressListener",
"nsISupportsWeakReference"]),

onLocationChange: function(aProgress, aRequest, aURI) {
alert("Called");
this.processNewURL(aURI);
},

onStateChange: function() {},
onProgressChange: function() {},
onStatusChange: function() {},
onSecurityChange: function() {}
};

window.addEventListener("load", function() { urlListener.init() }, false);
window.addEventListener("unload", function() { urlListener.uninit() }, false);

每当我尝试启动/测试此扩展时,我都会收到以下错误:

Running tests on Firefox 24.3.0/Gecko 24.3.0 ({ec8030f7-c20a-464f-9b0e-13a3a9e97384}) under linux/x86-gcc3.
Error: ReferenceError: window is not defined
Traceback (most recent call last):
File "resource://jid1-u33krawc1uacsa-at-jetpack/amazon_rewriter/tests/test-main.js", line 1, in
var main = require("./main");
File "resource://gre/modules/commonjs/sdk/loader/cuddlefish.js", line 133, in CuddlefishLoader/options<.load
result = load(loader, module);
File "resource://jid1-u33krawc1uacsa-at-jetpack/amazon_rewriter/lib/main.js", line 38, in
window.addEventListener("load", function() { urlListener.init() }, false);
0 of 1 tests passed.

可能是我不理解教程/扩展创建过程中的某些内容。

你能帮我理解缺少什么吗?

编辑在 kapep 回答后,我解决了窗口未定义错误。但当我更改地址栏中的网址时,似乎没有任何反应。有什么想法吗?

最佳答案

没有全局windowgBrowser对象,您需要获取浏览器并选择要添加的窗口(nsIDOMWindow)听者。这部分似乎缺失或超出了教程的范围。

var gBrowser = windowUtils.getMostRecentBrowserWindow().getBrowser();

可能有多种方法来获取窗口。我会使用低级 windowUtils 来做到这一点API。您可以使用 getMostRecentBrowserWindow 获取如上所述的最新窗口,或者更可靠地使用 windowUtils.windows() 获取所有当前打开的窗口,如下所示:

const windowUtils = require("sdk/window/utils");

for each (let window in windowUtils.windows()) {
urlListener.init();
window.addEventListener("unload", function() { urlListener.uninit(); }, false);
}

以防万一您还想将监听器添加到将来打开的所有窗口,您可以在新窗口打开时添加它们:

const windows = require("sdk/windows");
windows.browserWindows.on("open", domWindow => {
urlListener.init();
windowUtils.getMostRecentBrowserWindow().addEventListener("unload", function() { urlListener.uninit(); }, false);
});

关于javascript - Firefox 附加组件 window.addEventListener 错误 : window not defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22423929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com