通过Chrome扩展程序将监听器附加到AJAX事件

7
我想要对AJAX更新事件附加监听器,以便能够重新加载Chrome扩展程序。现在,如果用户单击并转到通过AJAX加载的站点的另一个部分,则扩展程序将不会显示出来。由于该站点不受我控制,因此我无法控制AJAX更新。谢谢!

你有没有在这方面有过什么好运气?我正在尝试解决不同原因引起的相同问题。我真的很想捕获浏览器接收到的任何响应内容。一定有办法做到这一点,因为Chrome中的开发者工具栏可以做到,并且我相信它是用JavaScript实现的。 - Omn
我认为这个答案可以帮到你:https://dev59.com/dWgt5IYBdhLWcg3w0wzB#11811558 - Amit Kumar Gupta
1个回答

7

如果不使用实验性API,您无法监听ajax请求,但是您可以监听DOMSubtreeModified事件,该事件在DOM被修改时触发:

document.addEventListener("DOMSubtreeModified", function(event){
        //something on the page has changed
});

当页面的大块内容被修改时,可能会触发数百个此类事件,因此需要小心。可能需要实现一些延迟。


感谢@serg,我已经尝试过这样做了,它可以工作,但像你说的那样,它会不断地触发事件:( 我想这是无法实现的,这很糟糕,因为我要么必须为我的用户创建一个重新加载扩展的按钮,要么让他们只需单击浏览器重新加载按钮。无论如何,还是非常感谢! - Garth Humphreys
@Garth,你能详细描述一下你的扩展是做什么的吗?你要寻找什么样的ajax请求(特定的还是任何的)?为什么你的扩展需要重新加载?使用延迟的DOMSubtreeModified是否可行? - serg
为什么我不能只使用jQuery并以那种方式附加监听器? - Setheron
@Setheron 你可以通过 .live 给不存在的元素附加监听器,但是你不能使用这种方式捕获元素何时被添加到页面中。 - serg
虽然这是一个老问题,但由于它在谷歌上出现了...这里有一个页面,提供了更为实时的概述。https://www.moesif.com/blog/technical/apirequest/How-We-Captured-AJAX-Requests-with-a-Chrome-Extension/# - ScottC
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接