为什么Firefox附加组件中的console.log无法输出消息?

时间:2015-04-17 22:18:45

标签: firefox-addon firefox-addon-sdk firefox-developer-tools

这个问题与console.log in firefox is not working?不同,因为这个问题与扩展调试面板有关,而不仅仅是网页控制台。

现在我在扩展程序调试面板中:console.info()无法输出hi消息,该怎么回事?

截图如下: console.info showing nothing

警报功能似乎在Firefox扩展中不起作用,有什么不对? Firefox扩展程序是否禁用了某些功能?

1 个答案:

答案 0 :(得分:3)

您的屏幕截图显示您有"记录"关掉。您需要点击" Logging"并至少启用Logging-> Log。如果没有启用,您将特别告诉控制台不要显示您尝试打印的hi

未启用日志记录: without logging

启用日志记录: with logging

但是,在进行双重检查测试时,我能够将其置于一种模式,即使在" Logging"已启用。当我关闭调试器的该实例并打开一个新实例时,hi已经打印在控制台中。另一方面,似乎任何新实例都将保留先前实例的输出。鉴于我设法将其置于启用了日志记录时hi未打印的模式,此新功能仍存在一些问题。我无法再次复制这个。

关于警报:不,没有任何禁用。您可能遇到了一个常见问题,即在您运行的上下文/范围中未定义变量hi。 Firefox浏览器扩展通常/通常在未定义window的上下文中运行。这最终成为许多人的问题,因为他们认为将为他们定义window

Window undefined

如果定义window取决于您输入的当前代码部分的输入方式。即使定义了window,也通常不会将其定义为您期望的window(当前标签的window)。您可能需要获取最近访问的窗口/选项卡的window对象的引用。

如果存在浏览器窗口(在某些情况下,您可以在没有浏览器窗口的情况下运行,例如在启动时),您可以获得对最新浏览器window的引用,{{1 }和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
Define window

并显示var window = event.view
An Alert

注意:如果您希望与multi-process Firefox(电解或e10s)本机兼容,那么获取对当前文档内容的访问权限会更复杂。有一些垫片可以使你的代码继续使用多进程Firefox一段时间,但它们可能最终消失。

参考文献:

  1. nsIWindowMediator
  2. Working with windows in chrome code
  3. SDK:window/utils
  4. SDK:windows
  5. 大部分内容均来自我之前的答案,包括this linkthis one