繁体   English   中英

如何在每次加载特定页面时运行 JavaScript 脚本。 浏览器:Edge(我正在使用 Tampermonkey)

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

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

// ==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. channels/@me替换为@match中的* ,使其变为https://discord.com/*

    这是必要的,因为 discord 是现代 SPA(单页应用程序),它使用history.pushState API 模拟导航,因此如果您先打开主页然后导航到您的频道,则不会出现页面加载事件,这意味着用户脚本不会在 URL 的此类更改上运行。

    因此,以前,您的用户脚本没有在初始页面上运行,之后也从未运行过。

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

  2. 通过将 function 分配给window的属性来公开它

  3. 移除外部 function 包装, 更多信息

这是// ==/UserScript==之后的完整代码

'use strict';

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

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

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

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

如果您想在 URL 匹配某些内容(例如您的频道)时运行代码,请参阅此答案

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM