2016-03-23 54 views
0

我正在嘗試開發一個簡單的Chrome擴展,其中我需要'聽'在頁面內進行的各種AJAX調用。Chrome.tabs.executeScript()和文件包括

這是我用來聽AJAX調用的代碼:

var isAjaxWorking = false; 
//timeout 
var timeout; 

//create new AJAX listener 
var s_ajax = new Object(); 

//rewrite send() method XMLHttpRequest 
s_ajax.tempSend = XMLHttpRequest.prototype.send; 

s_ajax.callback = function (event){ 
    isAjaxWorking = true; 
    timeout = 500;//5 seconds 
    var cycle = setInterval(function(){ 
     timeout--; 
     if(timeout > 0){ 
     if(event.readyState === 4){ 
      isAjaxWorking = false; 
      clearInterval(cycle); 
     } 
     } 
     else{ 
     console.log('s_ajax.callback : timeout'); 
     clearInterval(cycle); 
     isAjaxWorking = null; 
     } 
    },10); 
} 

XMLHttpRequest.prototype.send = function(a,b) { 
    if (!a) var a=''; 
    if (!b) var b=''; 
    s_ajax.tempSend.apply(this, arguments); 
    s_ajax.callback(this); 
} 

如果我注入這直接我要聽的頁面的控制檯內,它就像一個魅力,但是當我嘗試執行這在我的Chrome擴展中使用chrome.tabs.executeScript(),就好像在腳本執行後立即刪除所有內容。我知道這可能非常簡單,但我無法解決這個問題。在此先感謝您的每一個提示

+0

你能包括你如何在問題中使用'chrome.tabs.executeScript'嗎? 「一切都被刪除了」是什麼意思? – guest271314

+0

有一個專門用於監聽網絡請求的API,爲什麼不使用它呢? https://developer.chrome.com/extensions/webRequest – BeardFist

+0

@ guest271314我只是在你在互聯網上找到的每個例子中都使用它;順便說一下,我認爲問題是詹姆斯·戴斯在第一個答案中指出的:我的覆蓋不會影響頁面中的方法,因爲我的代碼不與頁面的代碼交互 – Alessandro

回答

0

這樣的事情在前些日子讓我生氣。閱讀以下內容:

獨立的世界允許每個內容腳本對其JavaScript環境進行更改,而不用擔心與頁面或其他內容腳本發生衝突。例如,內容腳本可能包含JQuery v1,頁面可能包含JQuery v2,並且它們不會相互衝突。 https://developer.chrome.com/extensions/content_scripts

您的代碼不會與頁面中的代碼進行交互,因此您在擴展代碼中覆蓋跨域請求方法將不會對該頁面使用的方法執行任何操作。