我正在尝试为某个站点执行内容脚本(注入按钮或更改链接)但是我想在用户浏览网站时执行此操作.
问题是网页是在用户浏览时使用ajax请求动态构建的.
我之前通过实际将我的javascript注入网页而编写的扩展中解决了这个问题.
我想知道是否有一个更好的选择,只能在我的内容脚本中注册ajaxComplete事件或类似的东西,以便我可以重新执行.
我可以做以下事情:
function listener() { console.debug("listener fired."); } document.addEventListener("DOMSubtreeModified",listener,false);
然而,在一页加载期间,这会发生太多次.
解决方法
我没有注意到ajax监听器,但是无论如何都没有帮助,因为你需要在修改页面时捕获,而不是发送/接收ajax请求(页面修改通常在以后发生,并且可以不依赖于ajax请求在所有).
DOMSubtreeModified是正确的方法,只需对过于频繁的调用实施一些保护:
function listener() { console.debug("listener fired."); } var timeout = null; document.addEventListener("DOMSubtreeModified",function() { if(timeout) { clearTimeout(timeout); } timeout = setTimeout(listener,500); },false);
这样,如果500ms内没有其他事件,它将触发监听器.