Javascript 如何在Firefox WebExtension中查看后台脚本的console.log输出?

Javascript 如何在Firefox WebExtension中查看后台脚本的console.log输出?,javascript,firefox,firefox-addon,firefox-addon-webextensions,firefox-developer-tools,Javascript,Firefox,Firefox Addon,Firefox Addon Webextensions,Firefox Developer Tools,有人知道如何在后台脚本中查看console.log()调用的输出吗?我可以在内容脚本中看到来自同一个脚本的输出。下面是我正在测试的一个简单脚本: 以下是我的background.js: 这是我的manifest.json: 我也在后台脚本中尝试过: chrome.browserAction.onClicked.addListener(function() { console.log('Message from background.js onclicked handler'); });

有人知道如何在后台脚本中查看
console.log()
调用的输出吗?我可以在内容脚本中看到来自同一个脚本的输出。下面是我正在测试的一个简单脚本:

以下是我的background.js:

这是我的manifest.json:

我也在后台脚本中尝试过:

chrome.browserAction.onClicked.addListener(function() {
    console.log('Message from background.js onclicked handler');
});

正如其他帖子所建议的那样,我甚至卸载了Firebug,但这也没有什么不同(请注意,内容脚本中的
控制台.log
可以正常工作)。

有关在控制台中查看扩展输出的更一般的回答,请参阅我的回答:

这是您应该用来查看在WebExtension的后台上下文中运行的脚本的控制台输出。这包括后台脚本、在弹出窗口中运行的脚本、选项页面以及从扩展加载的任何其他页面,作为选项卡或iframe的主URL。您可以通过
about:debug
➞检查(使用与正在调试的WebExtension关联的“检查”按钮;每个扩展都有一个单独的按钮)。这将使用调试器打开一个新选项卡。然后,您可以单击该浏览器选项卡中的Console选项卡。此控制台将仅显示您正在检查的WebExtension中的内容

默认情况下,浏览器控制台不再显示WebExtensions背景页的输出。通过选择显示“show Content Messages”(显示内容消息),您可以让它显示所有WebExtensions的输出,当您单击齿轮状符号时,弹出窗口会显示“show Content Messages”(显示内容消息)⚙️" 在窗口的右上角,就在“请求”的右侧

您可以从中的后台脚本中看到
console.log()
的输出。您可以使用OSX上的键盘快捷键Ctrl-Shift-J或Cmd-Shift-J,或从Firefox菜单栏:工具打开浏览器控制台➞网络开发者➞浏览器控制台

当在大于或等于49.1的版本中测试WebExtensions时,我经常滥用一个错误功能,导致扩展打开浏览器控制台函数在后台脚本中不受支持,但将打开浏览器控制台并在控制台中输出警报文本。2在大于或等于49.0的Firefox版本中,这样做将起作用。但是,在早期版本的Firefox中,它会引发错误

对于测试,我经常在我的背景脚本中包含以下内容:

//*要进行测试,请打开浏览器控制台
试一试{
//Firefox WebExtension后台脚本实际上不支持alert()。
//这将强制打开浏览器控制台。
//这种对错误特性的滥用适用于FF49.0b+,而不是FF48。
警报(“打开浏览器控制台”);
}捕获(e){
//alert()在49以下的Firefox版本中抛出错误。
log('alert()引发了一个错误。可能是Firefox版本<49');
}
//*

  • 在Firefox 52.0a2(开发者版)和53.0a1(夜间版)中,有一段时间,它会抛出一个神秘的错误。在这些版本的最新版本中,这已返回到Firefox 49中的功能:打开浏览器控制台,并在2(以下)中显示传递的文本和消息
  • 除了传递给
    alert()
    的文本外,它还将在单独的一行上输出:“alert()在后台窗口中不受支持;请改用console.log。“

  • 那么,当你点击一个按钮(不是弹出菜单)时,你如何调用“警报”?@Andreyua,来自后台脚本?你没有。你可以用自己的HTML打开一个窗口,使它看起来很像警报。你可以使它有效地模式化(即,用户必须在做任何其他事情之前与它进行交互),但你不可能有什么东西真正阻止了JavaScript的执行。不管是不是后台脚本,只要按下WebExtension按钮就可以调用普通警报?真的不是不可能吗?那就是
    alert()
    自动打开浏览器控制台的技巧非常出色。我常常想知道为什么我在控制台中看不到任何东西,只是为了记住它是错误的控制台!我将经常使用它!我碰巧打开了正确的控制台,因为我总是在重新加载JavaScript更改后检查控制台中是否有任何错误但是对于
    console.log
    我仍然需要检查“显示内容消息”(firefox版本70)。
    {
        "name": "TestBed",
        "manifest_version": 2,
        "version": "1.0",
    
        "background": {
            "scripts": ["background.js"]
        },
    
        "browser_action": {
            "default_title": "Click"
        },
    
        "applications": {
            "gecko": {
                "id": "testbed@example.com",
                "strict_min_version": "48.0a1"
            }
        }
    }
    
    chrome.browserAction.onClicked.addListener(function() {
        console.log('Message from background.js onclicked handler');
    });