Firefox浏览器中使用console.log在Greasemonkey脚本中无效。

15

我的用户脚本使用console.log()输出一些信息。

在Chrome中这个功能正常,但是当我在Firefox(Greasemonkey)中安装这个用户脚本时,Firefox的Web控制台没有显示任何内容。

我搜索了解决方案,有些人建议使用unsafeWindow,但它也不显示任何输出。此外,unsafeWindow不能用于Chrome。我甚至安装了Firebug,但没有用。我该如何解决这个问题?

例如,我已经在Firefox中尝试了这个用户脚本:

// ==UserScript==
// @name        console
// ==UserScript==
console.log("hello");
3个回答

19
你的意思是在通过Greasemonkey安装时无法工作,对吧?不久以前,Greasemonkey损坏了console.log(新!Bug报告)。现在,要查看来自Greasemonkey的普通console.log()调用的结果,您需要查看Firefox的错误控制台,而不是Firebug的。
您可以通过按下:CtrlShiftJ 来查看FF的错误控制台。 但是,您可以在Chrome和Greasemonkey脚本中使用unsafeWindow.console.log()。 Chrome现在对unsafeWindow有限支持。
如果使用unsafeWindow,则可以从Greasemonkey访问Firebug的日志记录功能的全部范围。(必须安装Firebug,并且它们可能仍然无法在Chrome用户脚本中工作;我已经有一段时间没有以这种方式进行测试了。)
在Firefox中,如果未安装Firebug或者未激活该页的Firebug,那么unsafeWindow.console.log()调用将显示在新的“Web控制台”中(CtrlShiftK)。 当在Greasemonkey脚本内部时,您需要使用unsafeWindow
请注意,Firefox当前原生支持console.log()console.info()console.warn()console.error()——不需要Firebug。

我试过了,它可以工作。请记住,在页面上必须禁用Firebug,并且除非您的脚本被注入,否则必须使用unsafeWindow - Brock Adams
我移除了Firebug并添加了unsafeWindow,我的代码现在是`// ==UserScript== // @name console // ==UserScript==unsafeWindow.console.log('hello');`,但仍然没有在我的Web控制台中显示任何内容。 - user1275375
现在我在我的Web控制台中得到了它,只有错误被标记为日志记录,所以我没有得到输出。但是unsafeWindow在Chrome中总是有效吗?谢谢并对犯的愚蠢错误表示抱歉。 - user1275375
我发现错误不在于unsafeWindow.console.log。而是在//@run-at document-start上。当我删除它时,Firefox会显示输出,但在Chrome中我得到了较少的标签。 - user1275375
那么,只需使用console.log而不是不安全的方法。唯一的问题是你会在Firefox的其他地方看到输出,但它确实存在。 - Brock Adams
显示剩余2条评论

5

等一下:如果问题是关于在控制台中使用Greasemonkey登录(我敢肯定我看到了标签),为什么不使用GM_log方法呢?

// ==UserScript==
// @name          GM_log Example
// @namespace     http://www.example.com/
// ==/UserScript==

GM_log("This is an example of GM_log");

或者是我漏掉了什么?

PS:您还可以在about:config中检查javascript.options.showInConsole。它应该是true


1
是的,你可以使用 GM_log,但它不具备可移植性或单元测试性。此外,与 console API 相比,它几乎没有任何优势 -- 无论是大多数浏览器现在支持的本机 API 还是 Firebug 的额外甜美的控制台 API。 - Brock Adams

1
我发现(使用Chrome / Tampermonkey进行测试),您需要: window.log("<message goes here>");,而不是 unsafeWindow.console.log("<msg>");, 因为unsafeWindowconsole会出现未定义的情况。
尝试一下,因为我相当确定这是在后期浏览器版本中应该采用的方式等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接