2017-07-27 57 views
0

我正在使用内容脚本构建一个Chrome扩展。纯JavaScript中的ajaxComplete

我有一段代码,它在使用jQuery的页面上的所有ajax请求成功时注入DOM元素。你如何重新创建没有jQuery? 请注意,我无法修改页面上的任何ajax请求。

if(window.jQuery){ 
jQuery(document).ajaxComplete(function(event, xhr, settings) { 
    for(var i =0; i< $jq('div.handwave').length; i++){ 
     if($($('div.handwave')[i]).children('.done').length < 1){ 
      $(document).find('div.handwave').eq(i).append(wind); 
     } 
    } 
}); 
} 

这可能吗?

+3

需要说明的是 - jQuery只是一个用JavaScript编写的库 - 使用jQuery的任何可能的情况都可以通过JavaScript实现,因为它的底层是_is_ JavaScript。 –

+0

jQuery只是JavaScript的扩展。 jQuery没有提供原始JavaScript无法处理的内容。访问[**您可能不需要jQuery **](http://www.youmightnotneedjquery.com)并逐个解码您的脚本。 –

+0

不幸的是,我没有得到任何替代方法。 – xoail

回答

2

更新

如果你正在编写一个Chrome扩展,你应该使用chrome.webRequest API。见https://developer.chrome.com/extensions/webRequest


您可以覆盖,使AJAX请求,如XMLHttpRequest.prototype.send添加自己的负载事件侦听器所需要的现有方法之一。例如

(function() { 
    const send = XMLHttpRequest.prototype.send 
    XMLHttpRequest.prototype.send = function() { 
     this.addEventListener('load', function() { 
      console.log('global handler', this.responseText) 
      // add your global handler here 
     }) 
     return send.apply(this, arguments) 
    } 
})() 

正如在评论中提到的,这不会涵盖fetch API。

+0

我看到'未捕获的ReferenceError:XMLHttpRequest未定义。我如何初始化? – xoail

+0

@xoail对不起,是我自修订以来的错字 – Phil

+0

完美的作品太棒了!谢谢! – xoail