簡體   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