我不知道我在这里谈论的是什么。
在某些网页上,它会过滤掉它们,其他像Youtube评论则无法正常工作。 需要更改哪些代码才能在这些网站中运行?
// ==UserScript==
// @name profanity_filter
// @namespace localhost
// @description Profanity filter
// @include *
// @version 1
// @grant none
// ==/UserScript==
function recursiveFindTextNodes(ele) {
var result = [];
result = findTextNodes(ele,result);
return result;
}
function findTextNodes(current,result) {
for(var i = 0; i < current.childNodes.length; i++) {
var child = current.childNodes[i];
if(child.nodeType == 3) {
result.push(child);
}
else {
result = findTextNodes(child,result);
}
}
return result;
}
var l = recursiveFindTextNodes(document.body);
for(var i = 0; i < l.length; i++) {
var t = l[i].nodeValue;
t = t.replace(/badword1|badword2|badword3/gi, "****");
t = t.replace(/badword4/gi, "******");
t = t.replace(/badword5|badword6|badword7/gi, "*****");
t = t.replace(/badword8/gi, "******");
l[i].nodeValue = t;
}
*将代码中的亵渎语言替换为badword
答案 0 :(得分:-1)
Youtube注释是异步加载的,在页面加载后很长一段时间(默认情况下,用户脚本在DOMContentLoaded
事件处执行),因此您需要将代码包装为waitForKeyElements的回调函数使用评论容器的选择器或MutationObserver
或setInterval
。
replaceNodes(); // process the page
waitForKeyElements('.comment-text-content', replaceNodes);
function replaceNodes() {
..............
..............
}
使用setInterval
代替waitForKeyElements:
replaceNodes(); // process the page
var interval = setInterval(function() {
if (document.querySelector('.comment-text-content')) {
clearInterval(interval);
replaceNodes();
}
}, 100);
function replaceNodes() {
..............
..............
}
P.S。不要盲目地将值分配给节点,首先检查它是否已更改以避免布局重新计算:
if (l[i].nodeValue != t) {
l[i].nodeValue = t;
}