为什么 waitForKeyElements() 只触发一次,尽管后来发生了变化?
Why does waitForKeyElements() only trigger once despite later changes?
几年来,我一直使用 waitForKeyElements()
函数来跟踪来自用户脚本的网页更改。但是,有时我发现它没有按预期触发并且已经解决了。我已经 运行 研究了这个问题的另一个例子,所以我现在正试图找出问题所在。以下是我可以创建的最简单的示例。
给定一个简单的 HTML 页面,如下所示:
<span class="e1">blah</span>
还有一些 Javascript:
// function defined here https://gist.github.com/BrockA/2625891
waitForKeyElements('.e1', handle_e1, false);
function handle_e1(node) {
console.log(node.text());
alert(node.text());
}
setInterval(function() {
$('.e1').text("updated: "+Math.random());
}, 5000);
我希望此代码每 5 秒触发一次 alert()
和一次 console.log()
。但是,它只会触发一次。有什么想法吗?
根据设计和默认设置,waitForKeyElements
只处理一个节点一次。要告诉它继续检查,return true
来自回调函数。
您还需要比较字符串(或其他内容)以查看它是否已更改。
因此,在这种情况下,handle_e1()
将类似于:
function handle_e1 (jNode) {
var newTxt = jNode.text ();
if (typeof this.lastTxt === "undefined" || this.lastTxt !== newTxt) {
console.log (newTxt);
this.lastTxt = newTxt;
}
return true; // Allow repeat firings for this node.
}
虽然在不断进行字符串比较,但如果一页上有很多这样的内容,性能可能会成为一个问题。在那种情况下,切换到 MutationObserver
方法可能是最好的。
几年来,我一直使用 waitForKeyElements()
函数来跟踪来自用户脚本的网页更改。但是,有时我发现它没有按预期触发并且已经解决了。我已经 运行 研究了这个问题的另一个例子,所以我现在正试图找出问题所在。以下是我可以创建的最简单的示例。
给定一个简单的 HTML 页面,如下所示:
<span class="e1">blah</span>
还有一些 Javascript:
// function defined here https://gist.github.com/BrockA/2625891
waitForKeyElements('.e1', handle_e1, false);
function handle_e1(node) {
console.log(node.text());
alert(node.text());
}
setInterval(function() {
$('.e1').text("updated: "+Math.random());
}, 5000);
我希望此代码每 5 秒触发一次 alert()
和一次 console.log()
。但是,它只会触发一次。有什么想法吗?
根据设计和默认设置,waitForKeyElements
只处理一个节点一次。要告诉它继续检查,return true
来自回调函数。
您还需要比较字符串(或其他内容)以查看它是否已更改。
因此,在这种情况下,handle_e1()
将类似于:
function handle_e1 (jNode) {
var newTxt = jNode.text ();
if (typeof this.lastTxt === "undefined" || this.lastTxt !== newTxt) {
console.log (newTxt);
this.lastTxt = newTxt;
}
return true; // Allow repeat firings for this node.
}
虽然在不断进行字符串比较,但如果一页上有很多这样的内容,性能可能会成为一个问题。在那种情况下,切换到 MutationObserver
方法可能是最好的。