【发布时间】:2019-12-10 07:44:30
【问题描述】:
这是我的第一个 Chrome 扩展程序。我正在构建一个扩展来替换页面上的文本。
所提供的代码适用于由 DOMContent 加载的任何内容。但是在使用某种无限滚动的页面上,当加载新内容时不会发生文本替换。
我需要它来对稍后添加到页面的任何内容运行文本替换。
我曾尝试使用 onscroll 事件侦听器,但这既尴尬又昂贵。我确信有更好的方法。
我已经研究过使用清单 run_at,但找不到使用它的方法。
let elements = document.getElementsByTagName('*');
let replacements = {
"first to replace": "new text",
"second to replace": "also new text"
};
let keys = Object.keys(replacements);
RegExp.quote = (str) => {
return str.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
};
let makeItAwesomer = () => {
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
for (var j = 0; j < element.childNodes.length; j++) {
let node = element.childNodes[j];
if (node.nodeType === 3) {
let text = node.nodeValue;
let newText = text;
if(keys.some(function(key){
return ~text.toLowerCase().indexOf(key.toLowerCase());
})){
keys.forEach( key => {
let regex = new RegExp(RegExp.quote(key), "gi");
newText = newText.replace(regex, replacements[key]);
});
if (newText != text) {
element.replaceChild(document.createTextNode(newText), node);
}
}
}
}
}
}
makeItAwesomer();
【问题讨论】:
-
不确定,但您不能监听网络流量stackoverflow.com/questions/6831916/…,然后每次都运行您的函数 - 显然会提供一些误报,但资源占用量应该更少。
标签: javascript google-chrome-extension dom-events infinite-scroll