如果您想检测 AJAX 创建的节点,您的选项(除了您明智地排除的 Mutation 事件)是:
- 使用间隔或计时器进行轮询。
- 试图挂钩页面的 AJAX 请求(如果有)。
- 拼接、劫持或替换页面的javascript。
我一次完成了所有这些,除了一个之外,所有这些都有主要缺点:
- 拼接到页面的 javascript 中并不总是那么容易(尤其是使用匿名函数),通常需要对该代码进行复杂的解构,并且非常脆弱。页面的 javascript 更改恕不另行通知。
- 挂钩到页面的 AJAX 请求有时可能很容易,但通过沙盒屏障传输信息通常会带来更多麻烦,而不是值得。
- 轮询在实践中效果很好,实施简单,通常成本低。
我建议您使用waitForKeyElements() 实用程序并完成它。它非常易于使用。例如:
// ==UserScript==
// @name Highlight good comments
// @include http://SOME_SITE/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// ==/UserScript==
function highlightGoodComments (jNode) {
if (/beer/i.test (jNode.text () ) ) {
jNode.css ("background", "yellow");
}
}
waitForKeyElements ("#userBlather div.comment", highlightGoodComments);