我想写改变关键字在Twitter的职位Greasemonkey的脚本。 麻烦的是,内容是“迟到装载”,并在用户请求加入。
如果我添加事件侦听器来添加的元素,我可以使用jQuery的delegate()
正如我只是想在加载时所改动的内容,这似乎并不合适。
突变事件似乎符合这个要求。 他们是壁虎具体,但是这没有多大意义的的Greasemonkey脚本。 问题是, 他们一直在贬值和一组很好的理由 。
当然,我可以用一个计时器,并定期轮询DOM,但这似乎只是恶心。
我怎样才能检测增加的DOM和应对插入的元素呢?
如果要检测AJAX创建节点的选项(除了你是明智的,以排除突变事件)是:
- 轮询间隔或定时器。
- 试图挂接到页面的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);