簡體   English   中英

有沒有辦法檢索從iframe發送的ajax響應?

[英]Is there a way to retrieve an ajax response sent from an iframe?

我想知道是否有任何方法可以檢索從iframe發送的ajax請求的響應。

iframe執行以下操作:

  1. iframe中的腳本發送ajax請求
  2. iframe獲得響應,並更新iframe中的內容

我想要做的是攔截iframe之外的請求,並使用該信息來更新頁面。

如果您使用chrome的開發工具,並轉到網絡標簽,則可以看到iframe發出的請求/響應。 如果有一個窗口事件或類似的東西,每次響應進入頁面時都會觸發它會很好。

注意:iframe是不在同一域中的頁面。

如果子iframe與父級不在同一個域中,那么您無法真正做任何可以跨瀏覽器工作的東西。 請參閱下面的jasonjifly的答案,了解適用於某些瀏覽器的技術,假設您可以控制兩個框架上的客戶端腳本。

如果父母和孩子在同一個域中,那么您可以實現所需的目標。

例如,假設您正在使用jquery,則可以在iframe中使用此代碼:

$.ajax(function() {
   .....
   complete: function() {
       window.parent.onAjaxComplete('Hi there');
   }
});

與父框架中的此代碼一起:

function onAjaxComplete(msg)
{
    alert(msg);
}

要在跨域方案中實現類似結果,您可以讓父幀輪詢服務器。 當服務器從子iframe接收到ajax請求時,它可以通過輪詢服務提醒父頁面。 顯然,如果您可以控制子iframe調用的服務,這將是合適的。

理論上,由於同源策略,禁止在兩個跨域iframe之間進行通信,請參閱此頁面: https//developer.mozilla.org/en-US/docs/Web/JavaScript/Same_origin_policy_for_JavaScript

在HTML5之前,我們有一些解決方法:

  1. 如果您只想使用iframe來獲取跨域數據,您可以使用JQuery:JSONP,本質就是使用。 “”允許執行跨域JavaScript。

  2. 另一種方法是“iframe中的iframe中的iframe”,您可以參考此頁面: http//blog.cakemail.com/the-if​​rame-cross-domain-policy-problem/

HTML5:

  1. window.postMessage,請參考此頁: https//developer.mozilla.org/en-US/docs/Web/API/window.postMessage

  2. HTML5 CORS,您需要配置服務器,請參考此頁面: http//www.html5rocks.com/en/tutorials/cors/

我的建議是使用解決方案1,它幾乎適用於所有主流瀏覽器。

(function() {
    var origOpen = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function() {
        this.addEventListener('load', function() {
            var json = $.parseJSON(this.responseText);


        });
        origOpen.apply(this, arguments);
    };
})();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM