1

给定网页上的项目随着时间的推移被 AJAX 调用更改,用户脚本如何在这些更改发生时得到通知?

想象一下 Facebook 新闻源。加载页面时,它有 12 个项目。这些项目被包装在<li>包含在<ul>. 当您向下滚动页面时,新<li>的数据块会加载到<ul>.

我想知道如何将这种更改通知用户脚本。

一个想法是不断地查询它<ul>,计算它的项目,然后观察这个数字是否变大。可能,但是要在更改发生时立即捕获更改,它可能必须经常运行以致成本太高。

另一个想法是找出触发加载的滚动位置,并注意这种变化。较便宜,但非常具体。

我想知道是否有第三种选择。 每当发生变化时都会通知我的东西。我不仅对提要感兴趣,而且更普遍地对这个概念感兴趣。给定页面上被 AJAX 调用更改的项目,用户脚本如何获得有关这些更改的通知?

4

3 回答 3

3

劫持发送方法

var oldSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function(){
    // do what you need; then send the request
    oldSend.apply(this, arguments);
}
于 2012-05-31T06:05:44.757 回答
1

我认为您正在寻找的是 DOMSubtreeModified 事件。

这适用于 firefox chrome 和 IE >= 9,如果您在 facebook 上的脚本我猜测它是用于油脂猴/chrome 扩展?如果是这样的话,这应该没问题。

每当添加删除或更改子节点时,都会在节点上触发此事件

你可以使用它

.addEventListener ("DOMSubtreeModified", handler, useCapture);

但我认为它不适用于 attachEvent。

这是有关它的更多信息。

http://help.dottoro.com/ljrmcldi.php

于 2012-05-31T07:00:52.863 回答
0

您是否有权访问更新页面内容的 Ajax 调用?通常,更好的方法是将调用附加到实际的 Ajax 调用。

如果使用 Jquery 发出请求,请使用 $.ajaxComplete() 或 $.ajaxSuccess() 来触发您的代码。这些将在请求完成时触发,因此当发生这种情况时,您可以检查内容是否已更改而不会花费太多。

$.ajaxSuccess(function() { //check for update and do something });
于 2012-05-31T06:06:09.977 回答