2012-06-02 82 views
0

我是ajax的新手,需要一些幫助來理解javascript在瀏覽器中的運行方式。我試圖解決的問題是攔截使用第二個JavaScript(注入此頁面)的Ajax響應。在瀏覽器中用Java腳本攔截ajax響應

當用戶第一次加載頁面時,我通過附加自己的javascript來修改服務器響應(通過代理)。後來在正常操作過程中,用戶試圖通過這個頁面獲取一些內容,我希望能夠攔截這個響應,當它包含特定的http標頭或使用注入的JavaScript內容並顯示一個彈出窗口時。

這甚至是可行的?我查了其他相關的問題,發現這可以使用瀏覽器擴展(內容腳本等)完成,但我想知道這是否可能使用JavaScript注入頁面本身。

回答

2

你打算如何攔截AJAX響應?我發現使用JavaScript的唯一方法是如果您有權訪問原始的XMLHttpRequest對象。試想一下:

var request = new XMLHttpRequest; 
request.onreadystatechange = handler; 
request.open("GET", "/somefile.php", true); 
request.send(); 

function handler() { 
    if (request.readyState == 4 && request.status == 200) { 
     // do something 
    } 
} 

現在攔截你就需要重寫request.onreadystatechange事件處理程序,這樣做,你就需要訪問request對象這個Ajax響應。

由於您試圖攔截使用注入腳本的響應,您的腳本將只能訪問全局變量,這意味着如果request對象是全局變量,那麼您將只能截取AJAX響應。

即使那樣,您永遠也不能確定您注入的腳本將在AJAX請求之前,之後或期間執行。你可以做的最好的是檢查readyState的請求,如果太晚,就乾脆放棄。

如果您嘗試啓動攔截AJAX響應的XSS攻擊絕對不可行。乾杯。

+0

非常感謝Aadit! – Kamal