【问题标题】:How to determine why a Greasemonkey script is not running [duplicate]如何确定 Greasemonkey 脚本未运行的原因 [重复]
【发布时间】:2009-09-11 13:16:11
【问题描述】:

我正在尝试让 Greasemonkey 脚本在页面上运行。但事实并非如此。

如何调试脚本?

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

【问题讨论】:

  • 顺便说一句,我解决了我的具体问题。原来,“管理用户脚本”对话框中的“包含页面”包括“lavpriskoekken.dk/*”而不是“lavpriskoekken.dk/
  • 同样的事情发生在我身上。 Hello World 将正常运行,然后我将添加一行并停止工作。如果我把它拿回来,它就再也不会起作用了。油脂猴子是否崩溃或其他什么需要重新启动解释器?你是怎么做到的?
  • 你不需要“重启”Greasemonkey。每次将与您包含的页面匹配的页面加载到浏览器中时,它都会尝试运行您的脚本。所以“重启”的方法是在浏览器上点击刷新。
  • 我遇到了与 Ken 相同的问题,添加一行会使脚本停止响应,而删除该行并不能解决问题。让我发疯。这就像 Greasemonkey 引擎正在缓存脚本的损坏版本,而不是让它离开或其他东西。令人沮丧。
  • 与 Ken 和 Scottie 相同的问题 - 简单的“hello world”脚本有效,添加一行但失败,删除该行,它将不再有效。把我逼疯了。

标签: greasemonkey


【解决方案1】:

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

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

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

这是脚本甚至不应用的最简单方法,因此根本不运行。另外,一定要检查语法错误;错位的分号会阻止脚本被解析,因此会被忽略。

【讨论】:

  • 是的,这解决了我的问题!
  • 这对我有用,但只是含糊不清!我正在为 FB 创建一个脚本,我有 @include https://www.facebook.com,尽管确切的地址是 https://facebook.com,但它没有加载。因此,即使没有正斜杠,“模式”也匹配,但当字符串 100% 相同时,它不匹配。很奇怪。
  • 公平地说,www.facebook.com != facebook.com.
【解决方案2】:

对我来说,脚本中有语法错误,Greasemonkey 没有给出错误消息。将脚本复制粘贴到 JS 控制台就揭示了这个秘密。

【讨论】:

    【解决方案3】:

    您可以在脚本中的任何位置写入日志,以便更好地跟踪在脚本中执行的操作:

    GM_log("Hello, World!");
    

    http://wiki.greasespot.net/GM_log

    更多信息: http://wiki.greasespot.net/Greasemonkey_Manual:Other_Useful_Tools#JavaScript_Console

    另一个提示:查看整个greasemonkey wiki。他们那里有很多好东西: http://wiki.greasespot.net/Main_Page

    【讨论】:

    • 谢谢,但在我需要这个的时候,我的脚本甚至没有运行——甚至无法运行像 alert("hello"); 这样的语句。所以我希望建立一个清单,其中包含您可以检查您的脚本是否甚至没有运行的步骤。
    • 从 Greasemonkey 3.2(Firefox 38,OS X)开始,GM_log 似乎不起作用。
    • @LenarHoyt 是正确的。应该改用console.log();
    【解决方案4】:

    在 Firefox 中,打开工具 > 错误控制台并在加载页面时观察它。如果您对页面上的警告感到不知所措,您可以过滤错误,这仍然经常突出您的脚本问题。

    【讨论】:

    • FF应该是这样的。然而,现在 UserScript 的某些错误(如脚本无法编译)既不会出现在 Web 控制台 (Ctrl+Shift+K) 中,也不会出现在浏览器控制台 (Ctrl+Shift+J) 中。看来我们必须切换到 Chrome 才能调试 GM 脚本..
    【解决方案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 文件。

    【讨论】:

      【解决方案6】:

      确保首先启用 Greasemonkey:

      【讨论】:

        【解决方案7】:

        另外,@include 的语法是只有一个匹配模式。如果您想要另一个,请添加另一个 @include 行。

        【讨论】:

          【解决方案8】:

          如果页面的 URL 是使用 Javascript 而不是通过导航设置的(例如 Instagram 为其弹出窗口提供永久链接 URL),Greasemonkey 会将脚本显示为正在运行,但实际上不会启动。尝试重新加载 URL 并查看它是否真的进入了同一页面。如果没有,您必须匹配主页 URL 而不是弹出 URL。

          【讨论】:

            【解决方案9】:

            我也遇到过这个问题;这是我的解决方案:

            • 当它发生时检查我正在处理的代码的(并修改棘手的)部分

            • 卸载并重新安装 GreaseMonkey

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

            编辑:今天的问题比平时更频繁(新版本?) 看起来 Firefox 网络工具正在与油脂猴或 JS 引擎战斗以获取错误消息

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-02-05
              • 1970-01-01
              • 1970-01-01
              • 2021-03-29
              • 2015-04-21
              • 2015-12-04
              相关资源
              最近更新 更多