首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单的web脚本无休止地运行,而不是只运行一次

简单的web脚本无休止地运行,而不是只运行一次
EN

Stack Overflow用户
提问于 2020-12-17 13:30:00
回答 1查看 99关注 0票数 1

我正在写一个the猴子脚本来更改网页上的东西的名称。然而,脚本似乎会无休止地运行。如果脚本在相应的网站(https://www.gutenberg.org/files/46/46-h/46-h.htm)上运行,它将把"Scrooge“变成"Happy Scrooge”变成"Happy Scrooge“等等,而不只是把"Scrooge”变成"Happy Scrooge“。

最终,页面会耗尽内存并使选项卡崩溃。即使没有什么东西可以重新替换,就像“悲伤”变成“快乐”一样,它仍然会在一分钟内崩溃标签。这对我来说似乎相当简单,但我还没有在网上找到解决方案。如果有任何帮助,我将不胜感激!

我是网络编程的新手,所以如果任何人对清理我的代码有任何建议,我会非常感谢。

代码语言:javascript
复制
// ==UserScript==
// @name         Change Name
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Changes the name of something on a webpage.
// @author       You
// @match        https://www.gutenberg.org/files/46/46-h/46-h.htm
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    function run () {
        var ele = document.querySelectorAll("p");
        var i, str, n;
        var oldName = "Scrooge";
        var newName = "Happy Scrooge";
        for (i = 0; i < ele.length; i++) {
            str = ele[i].innerHTML;
            n = str.indexOf(oldName);
            if (n > -1) {
                str = str.replace(oldName, newName);
                ele[i].innerHTML = str;
            } else {
                setTimeout(run, 500);
            }
        }
    }

    run();
})();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-17 13:36:14

为了确保Happy Scrooge不会被Happy Happy Scrooge替换,我将使用一个正则表达式:匹配(?<!Happy )Scrooge并替换为Happy Scrooge,这样更改过的部分就不会再次被更改,替换为/(?<!Happy )Scrooge/g

但是递归超时没有任何意义--只需替换一次:

代码语言:javascript
复制
// ==UserScript==
// @name         Change Name
// @match        https://www.gutenberg.org/files/46/46-h/46-h.htm
// @grant        none
// ==/UserScript==

for (const p of document.querySelectorAll("p")) {
  p.innerHTML = p.innerHTML.replace(/(?<!Happy )Scrooge/g, 'Happy Scrooge');
}

但是,在这一点上,因为它看起来不像Happy Scrooge存在于原始的超文本标记语言中的任何地方,所以看起来不需要后视:

代码语言:javascript
复制
p.innerHTML = p.innerHTML.replaceAll('Scrooge', 'Happy Scrooge');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65335167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档