如何让 Tampermonkey 用户脚本替换文本文件中的单词?

How Do I Make A Tampermonkey Userscript Replace Words In Text Files?

6 年前我问了一个关于使用 greasemonkey 重写浏览器中显示的文本文件的问题。 Can I Make Greasmonkey Scripts Run On Text Files?

我现在回到一个类似的问题,我试图将它粘贴到 Tampermonkey,但它没有替换文本。

我做错了什么?

// ==UserScript==
// @name         Rewrite LLVM License
// @namespace    http://tampermonkey.net/
// @version      0.1
// @match        http://llvm.org/releases/2.8/*
// @include      http://llvm.org/releases/2.8/LICENSE.TXT
// @require      http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @grant        none
// ==/UserScript==

(function() {
    //Just to tell the linter that $ is defined in jquery
    /* global $ */

    //Browsers display text in a pre tag
    var pageTextNd=$("body > pre");

    //Replace the text LLVM
    var newPageTxt=pageTextNd.text().replace("LLVM", "Ernst Blofeld");

    //Rewrite the page
    pageTextNd.text(newPageTxt);
})();

您感兴趣的页面似乎重定向到:

https://releases.llvm.org/2.8/LICENSE.TXT

这就是您需要将 @include@match 设置为的内容。

您还想替换 all 个 LLVM 实例,所以使用 .replaceAll:

// ==UserScript==
// @name         Rewrite LLVM License
// @include      https://releases.llvm.org/2.8/LICENSE.TXT
// @require      http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @grant        none
// ==/UserScript==

(function() {
    //Just to tell the linter that $ is defined in jquery
    /* global $ */

    //Browsers display text in a pre tag
    var pageTextNd=$("body > pre");

    //Replace the text LLVM
    var newPageTxt=pageTextNd.text().replaceAll("LLVM", "Ernst Blofeld");

    //Rewrite the page
    pageTextNd.text(newPageTxt);
})();

如果您不想依赖 replaceAll,请改用带有 .replace 的正则表达式:/LLVM/g.

依靠 jQuery 来完成这种微不足道的事情似乎很奇怪 - 你可以在没有库的情况下很容易地完成它:

// ==UserScript==
// @name         Rewrite LLVM License
// @include      https://releases.llvm.org/2.8/LICENSE.TXT
// @grant        none
// ==/UserScript==

const pre = document.querySelector('body > pre');
pre.textContent = pre.textContent.replaceAll('LLVM', "Ernst Blofeld");