我的非常简单的 Greasemonkey 脚本没有运行?

IT技术 javascript debugging firefox greasemonkey
2021-01-26 10:54:34

我对这个非常基本的 Greasemonkey 脚本有问题,很可能是元数据配置。

这是基本文件的完整来源

// ==UserScript==
// @name        Google Hello
// @namespace   https://google.com
// @description Basic Google Hello
// @include     *
// @version     1
// ==/UserScript==

alert("hi google!");

当我访问 Google.com 时,该脚本应该会运行,但没有弹出警报。问题是什么?

我正在尝试使用 Firefox 在 Ubuntu 上运行此脚本。

1个回答

如果alerts()没有触发,可能是您点击了 Firefox 的Prevent this page from creating additional dialogs选项,或者设置了浏览器首选项(旧版本的 Firefox),或者 Firefox 可能在内存中变得不稳定。

通用 Greasemonkey 调试步骤:

(针对 . 的问题添加了一个步骤alert()。)

  1. 首先确保脚本甚至为相关页面触发。
    在浏览该页面时,单击 Greasemonkey 图标旁边的向下三角形(或者,您可以在 Firefox 菜单上打开工具-> Greasemonkey。)并验证预期的脚本名称是否出现并被选中。例如:
    Greasemonkey 状态

  2. 查看Firefox 的浏览器控制台是否有任何相关消息/错误
    CtrlShiftJ或等效键激活控制台

    这是显示消息和错误如何出现在浏览器控制台中的屏幕截图- 由网页和 Greasemonkey 脚本引起:
    示例浏览器控制台结果

  3. 打开about:config,搜索capability.policy.default.Window.alert并删除或重置该值(如果找到)。

  4. 卸载 Greasemonkey 脚本。
  5. 彻底清除浏览器缓存。
  6. 完全关闭 Firefox。 使用Task Manager或等效工具来验证内存中是否没有 Firefox 线程/任务/进程。
  7. 重启火狐。
  8. 重新安装 Greasemonkey 脚本。
  9. 如果它仍然不起作用,请创建一个新的 Firefox 配置文件完全尝试另一台计算机

附加问题:

  1. 请提供您的三个版本 (1) 操作系统,(2) Firefox,(3) Greasemonkey 或 Tampermonkey 或 Scriptish 等。

  2. @include *意味着脚本将为每个页面触发! 这几乎总是一种糟糕的做法。(有一些例外,但你的情况不是一个。)

  3. @namespace不控制页面运行的位置。 唯一要做的@namespace就是允许多个脚本具有相同的名称(只要它们的@namespaces 不同)。请参阅@namespace文档

  4. 避免alert()用于调试。这很烦人,可以掩盖计时问题。
    使用console.log(). 您可以浏览器控制台上查看结果和有用的错误消息(提示、提示)

  5. 谷歌几乎总是使用/重定向到www.google.com(对于美国英语用户)。所以,// @include  https://google.com几乎永远不会像你想要的那样工作。

    推荐您使用:

    // @match  *://www.google.com/*
    

    作为起点。

    在 Firefox Greasemonkey 中,你还可以使用魔法.tld来支持 Google 的大部分国际域,如下所示:

    // @include  http://www.google.tld/*
    // @include  https://www.google.tld/*
    

    使用两条线。请注意,这并不像该@match行那样执行。因此,如果您只关心一个国家/地区,只需使用@match.


把它们放在一起:

  1. 卸载你的脚本。
  2. 重启火狐。
  3. 安装这个脚本:

    // ==UserScript==
    // @name        Google Hello
    // @namespace   John Galt
    // @description Basic Google Hello
    // @match       *://www.google.com/*
    // @version     1
    // @grant       none
    // ==/UserScript==
    
    console.log ("Hi Google!");
    
  4. 访问Google并注意 Firefox 浏览器控制台上的结果。

  5. 如果仍有问题,请按照上述所有调试步骤进行操作。
  6. 如果仍有问题,请打开一个新问题并提供以下所有内容:
    1. 上面提到的三个版本。
    2. 您在浏览器控制台上收到相关错误和消息
    3. 复制问题所需的确切代码和步骤。为此制作一个MCVE!
    4. 您尝试解决问题的方法的简短摘要。
写意的脸……太棒了
2021-03-22 10:54:34