您的屏幕截图显示您已关闭“记录”。您需要点击“Logging”并至少启用 Logging->Log。如果不启用该功能,您会明确告诉控制台不要显示您正在尝试打印的 hi。
未启用日志记录:
启用日志记录:
但是,在测试以进行仔细检查时,我能够使其进入一种模式,即使启用了“日志记录”,hi 也不会在控制台中打印。当我关闭该调试器实例并打开一个新实例时,hi 已经打印在控制台中。另一方面,似乎任何新实例都将保留先前实例的此类输出。鉴于我设法让它进入启用日志记录时不打印hi 的模式,这个新功能仍然存在一些问题。我无法再复制一次。
关于警报:不,没有禁用任何东西。您可能遇到了一个常见问题,即变量window 未在您运行的上下文/范围中定义。 Firefox 浏览器扩展经常/通常在未定义 window 的上下文中运行。这最终成为许多人的问题,因为他们认为将为他们定义window。
是否定义了window 取决于当前运行的代码部分是如何输入的。即使定义了window,它通常也不会定义为您所期望的window(当前选项卡的window)。您可能需要为最近访问的窗口/选项卡获取对 window 对象的引用。
如果存在浏览器窗口(在某些情况下,您可能在不存在浏览器窗口的情况下运行,例如在启动时),您可以获得对最新浏览器 window、document 和gBrowser 与:
if (window === null || typeof window !== "object") {
//If you do not already have a window reference, you need to obtain one:
// Add/remove a "/" to comment/un-comment the code appropriate for your add-on type.
/* Add-on SDK:
var window = require('sdk/window/utils').getMostRecentBrowserWindow();
//*/
//* Overlay and bootstrap (from almost any context/scope):
var window=Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator)
.getMostRecentWindow("navigator:browser");
//*/
}
if (typeof document === "undefined") {
//If there is no document defined, get it
var document = window.content.document;
}
if (typeof gBrowser === "undefined") {
//If there is no gBrowser defined, get it
var gBrowser = window.gBrowser;
}
如果您正在运行代码以响应事件(例如按钮command 事件),您可以通过以下方式获取当前window:
var window = event.view
定义window:
并显示window.alert('Hello'):
注意:如果您希望与multi-process Firefox(Electrolysis 或 e10s)原生兼容,那么访问当前文档的内容会更加复杂。有一些 shims 可以让您的代码在多进程 Firefox 中继续工作一段时间,但它们可能/将会最终消失。
参考资料:
nsIWindowMediator
- Working with windows in chrome code
- SDK:window/utils
- SDK:windows
其中大部分内容是从我之前的答案中复制而来的,包括 this link 和 this one。