Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用户脚本如何获得页面上ajax驱动更改的通知?_Javascript_Userscripts - Fatal编程技术网

Javascript 用户脚本如何获得页面上ajax驱动更改的通知?

Javascript 用户脚本如何获得页面上ajax驱动更改的通知?,javascript,userscripts,Javascript,Userscripts,给定网页上的项目随着时间的推移会被AJAX调用更改,用户脚本如何在这些更改发生时得到通知 想象一下Facebook新闻提要。加载页面时,其中有12项。这些项目包装在标签中,标签包含在中。向下滚动页面时,新的数据块将加载到该中 我想知道如何通知用户脚本这样的更改 一个想法是不断地查询这个,计算它的项目,观察这个数字是否变大。这是可能的,但为了在变化发生时及时发现变化,它可能不得不频繁运行,这太昂贵了 $.ajaxSuccess(function() { //check for update and

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

想象一下Facebook新闻提要。加载页面时,其中有12项。这些项目包装在
  • 标签中,标签包含在
    中。向下滚动页面时,新的
  • 数据块将加载到该

    我想知道如何通知用户脚本这样的更改

    一个想法是不断地查询这个
    ,计算它的项目,观察这个数字是否变大。这是可能的,但为了在变化发生时及时发现变化,它可能不得不频繁运行,这太昂贵了

    $.ajaxSuccess(function() { //check for update and do something });
    
    另一个想法是找出什么滚动位置触发加载,并观察这种变化。比较便宜,但是非常具体

    我想知道是否还有第三种选择。任何时候发生变化都会通知我的东西。我不仅对feed感兴趣,而且对这个概念更感兴趣。如果页面上的项目被AJAX调用更改,用户脚本如何获得这些更改的通知?

    劫持send方法

    var oldSend = XMLHttpRequest.prototype.send;
    XMLHttpRequest.prototype.send = function(){
        // do what you need; then send the request
        oldSend.apply(this, arguments);
    }
    
    劫持发送方法

    var oldSend = XMLHttpRequest.prototype.send;
    XMLHttpRequest.prototype.send = function(){
        // do what you need; then send the request
        oldSend.apply(this, arguments);
    }
    

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

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

    $.ajaxSuccess(function() { //check for update and do something });
    

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

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

    $.ajaxSuccess(function() { //check for update and do something });
    

    我想你要找的是DOMSubtreeModified事件

    这适用于firefox chrome和IE>=9,如果你在facebook上的脚本我猜它是一个greasemonkey/chrome扩展?如果是这样的话,这应该没问题

    在添加、删除或更改子节点时,会在节点上激发此事件

    你可以和我一起使用

    .addEventListener ("DOMSubtreeModified", handler, useCapture);
    
    但我认为它对attachEvent不起作用

    这里有更多的信息


    我想您要查找的是DOMSubtreeModified事件

    这适用于firefox chrome和IE>=9,如果你在facebook上的脚本我猜它是一个greasemonkey/chrome扩展?如果是这样的话,这应该没问题

    在添加、删除或更改子节点时,会在节点上激发此事件

    你可以和我一起使用

    .addEventListener ("DOMSubtreeModified", handler, useCapture);
    
    但我认为它对attachEvent不起作用

    这里有更多的信息


    这应该是一个评论,你在问一个关于这个问题的问题。OP想要编写facebook的脚本我以为facebook就是一个例子,你是对的,它应该是一个评论,我已经更新了一个有效的答案,我对FB特别感兴趣,不仅仅是feed。这应该是一个评论,你在问一个关于这个问题的问题。OP想要编写facebook的脚本我以为facebook就是一个例子,你是对的,它应该是一个评论,我已经更新了一个有效的答案,我对FB特别感兴趣,不仅仅是feed。你是在使用Firefox、Chrome还是两者兼用?两者都有。safari会很棒的。你是使用Firefox、Chrome还是两者都用?两者都用。狩猎旅行会很棒,但这不是个好建议。突变事件是脆弱的、资源密集型的,现在已经被弃用<不建议使用code>DOMSubtreeModified
    ,并且在未来版本的浏览器中将取消对此类事件的支持。很高兴知道,我还没有真正使用过它们,它们是我能想到的唯一不涉及保存和比较值的解决方案。这是一个不好的建议。突变事件是脆弱的、资源密集型的,现在已经被弃用<不建议使用code>DOMSubtreeModified
  • ,并且在未来版本的浏览器中将取消对此类事件的支持。很高兴知道,我还没有真正使用过它们,它们是我能想到的唯一不涉及保存和比较值的解决方案。