每次加载特定页面时如何制作 JavaScript 脚本 运行。浏览器:Edge(我使用的是 tampermonkey)

How do I make a JavaScript script run every time a specific page loads. Browser: Edge (I'm using tampermonkey)

好的,标题可能有点令人困惑,但我的目标是使用 tampermonkey,制作一个用户脚本,声明一个函数,每次加载页面 (discord) 时我都可以在控制台中使用该函数。这是我的用户脚本的样子:

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://discord.com/channels/@me
// @grant        none
// ==/UserScript==

(function() {
  'use strict';
  
  function alert1() {
    alert();
  }
  
})();

再次说明一下,我想将上面的代码放入用户脚本中。我希望能够从控制台调用 alert1();

  1. @match中的channels/@me替换为*,变成https://discord.com/*

    这是必要的,因为 discord 是一个现代 SPA(单页应用程序),它使用 history.pushState API 模仿导航,所以如果您先打开主页然后导航到您的频道,将会没有页面加载事件意味着用户脚本不会 运行 在 URL.

    的这种变化上

    因此,以前,您的用户脚本不会 运行 在初始页面上,之后也不会 运行。

    现在无论是否是您的频道,它 运行 在初始页面上只出现一次。

  2. 通过将函数分配给 window

    的 属性 来公开该函数
  3. 删除外部函数包装器,

这是// ==/UserScript==

之后的全部代码
'use strict';

window.alert1 = function alert1() {
  alert('foo');
}

如果要公开多个函数,请使用 shorthand 声明以避免代码重复:

Object.assign(window, {
  foo() {
    alert('foo');
  },
  bar() {
    alert('bar');
  },
});

如果你想像GM_setValue一样使用@grant,请将上面代码中的window替换为unsafeWindow

如果您想在 URL 匹配某些内容(例如您的频道)时 运行 编码,请参阅 this answer

在 Greasemonkey/Firemonkey 中,您还必须使用 exportFunction