2017-07-27 58 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