如何确定为什么Greasemonkey脚本没有运行

38

我正在尝试在一个页面上运行Greasemonkey脚本,但没有起作用。

如何调试脚本?

新建一个Greasemonkey脚本的最小步骤是什么?


1
顺便说一下,我解决了我的特定问题。原来“管理用户脚本”对话框中的“包含页面”包括“lavpriskoekken.dk/”,而不是“lavpriskoekken.dk/*”。 - Jesper Rønn-Jensen
4
我也遇到过同样的问题。最开始,Hello World可以运行,但当我添加一行代码后,程序就会停止运行。如果我删掉那行代码,程序也无法再次正常运行。是不是Greasemonkey崩溃了?需要重启解释器吗?如果是这样,你怎么操作呢? - user608888
4
我和Ken遇到了同样的问题,添加一行代码会导致脚本停止响应,但删除该行并不能解决问题。这让我非常苦恼,就像Greasemonkey引擎缓存了一个错误版本的脚本而不放手一样。非常令人沮丧。 - Scott
1
和 Ken 和 Scottie 一样的问题 - 简单的“hello world”脚本可以工作,但添加一行后就会失败,删除该行后,它将不再起作用。 让我感到疯狂。 - Tim Holt
对我来说解决方法是使用“Web控制台”,快捷键为Ctrl+Shift+K,而不是Ctrl+Shift+J。 - jaggedsoft
显示剩余2条评论
9个回答

50

当我开始使用用户脚本时,我的第一个错误是没有使用通配符。

// Broken:
// @include        https://www.example.com/

// Working:
// @include        https://www.example.com/*

这是脚本完全不应用,从而根本不运行的最简单方法。此外,请确保检查语法错误;分号放错位置会防止脚本被解析,因此被忽略。


4
是的,这解决了我的问题! - Germstorm
这对我有用,但那只是含糊不清!我正在为FB创建一个脚本,我使用了@include https://www.facebook.com,但它没有加载,尽管确切的地址是https://facebook.com。所以即使没有正斜杠,"pattern"也会匹配,但当字符串完全相同时却不匹配。奇怪。 - MarioDS
7
公平地说,www.facebook.com 不等于 facebook.com。 - Myrddin Emrys

9
对于我来说,脚本中存在语法错误,但是Greasemonkey没有给出错误消息。将脚本复制到JS控制台中揭示了这个秘密。

7

15
谢谢,但当我需要这个时,我的脚本甚至没有运行 - 无法运行像 alert("hello"); 这样的语句。因此,我希望建立一个清单,列出一些步骤,来检查你的脚本是否能够运行。 - Jesper Rønn-Jensen
5
截至Greasemonkey 3.2(Firefox 38,OS X),GM_log似乎无法正常工作。 - Lenar Hoyt
1
@LenarHoyt是正确的。应该使用console.log(); - fedxc

5
在Firefox中,打开工具菜单->错误控制台,在页面加载时观察它。如果您被页面的警告信息所压倒,可以筛选出错误信息,这通常会突出显示您的脚本问题。

2
在 Firefox 中应该是这样的。然而现在,用户脚本中的某些错误(比如脚本无法编译)既不会显示在 Web 控制台(Ctrl+Shift+K)中,也不会显示在浏览器控制台(Ctrl+Shift+J)中。看起来我们必须切换到 Chrome 来调试 GM 脚本.. - Tino

5
我的Greasemonkey脚本一开始正常工作,我添加了一行代码之后它停止工作了。我移除了那一行代码,但它仍然无法工作。
后来我发现,重新加载包含新代码的脚本时,Greasemonkey安装了一个损坏的updater.php脚本。如果重新加载旧脚本,将会保留这个损坏版本的updater.php脚本。最终,在Firefox Web控制台中找到了一个有关updater.php脚本的错误信息。我在加载新版本脚本后用一个带注释的文件替换了updater.php脚本,于是我的脚本开始执行了。
在Mac上,我的updater.php文件位于:/Users/csimmons/Library/Application Support/Firefox/Profiles/81ri7k71.default/gm_scripts/Extended_LoU_Tweak
你可能可以在Firefox默认配置文件的gm_scripts目录下找到类似的updater.php文件。

4

请确保首先启用了Greasemonkey:


2
如果页面的URL是通过JavaScript设置而不是通过导航设置的(例如Instagram将其弹出窗口的永久链接URL设置为JavaScript),那么Greasemonkey将显示脚本正在运行,但实际上它并不会启动。尝试重新加载URL并查看是否实际转到了相同的页面。如果没有,则必须匹配主页URL而不是弹出窗口URL。

2
此外,@include 的语法只允许有一个匹配模式。如果你需要另一个模式,请添加另一行 @include

1
我也遇到了这个问题;这是我的解决方案:
  • 检查(并修改)当它发生时我正在处理的代码部分

  • 卸载并重新安装 GreaseMonkey

  • 然后我得到了一个真正的错误报告

编辑:今天问题比通常更频繁(新版本?) 看起来 Firefox 网络工具与 greasemonkey 或 JS 引擎为错误消息争斗

因此,当您在某个地方查找(ctrl+alt+k)时,错误消息会出现在其他地方(尝试打开另一个控制台),就像一个有趣的游戏。


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