【问题标题】:Why console.log in Firefox add-on cannot output message?为什么 Firefox 插件中的 console.log 不能输出消息?
【发布时间】:2015-04-17 22:18:45
【问题描述】:

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

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

截图如下:

警报功能似乎在 Firefox 扩展中不起作用,这是怎么回事? Firefox 扩展是否禁用了某些功能?

【问题讨论】:

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


    【解决方案1】:

    您的屏幕截图显示您已关闭“记录”。您需要点击“Logging”并至少启用 Logging->Log。如果不启用该功能,您会明确告诉控制台不要显示您正在尝试打印的 hi

    未启用日志记录:

    启用日志记录:

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

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

    是否定义了window 取决于当前运行的代码部分是如何输入的。即使定义了window,它通常也不会定义为您所期望的window(当前选项卡的window)。您可能需要为最近访问的窗口/选项卡获取对 window 对象的引用。

    如果存在浏览器窗口(在某些情况下,您可能在不存在浏览器窗口的情况下运行,例如在启动时),您可以获得对最新浏览器 windowdocumentgBrowser 与:

    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 中继续工作一段时间,但它们可能/将会最终消失。

    参考资料:

    1. nsIWindowMediator
    2. Working with windows in chrome code
    3. SDK:window/utils
    4. SDK:windows

    其中大部分内容是从我之前的答案中复制而来的,包括 this linkthis one

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      • 1970-01-01
      • 2021-07-21
      相关资源
      最近更新 更多