[英]Is there a way to retrieve an ajax response sent from an iframe?
我想知道是否有任何方法可以檢索從iframe發送的ajax請求的響應。
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之前,我們有一些解決方法:
如果您只想使用iframe來獲取跨域數據,您可以使用JQuery:JSONP,本質就是使用。 “”允許執行跨域JavaScript。
另一種方法是“iframe中的iframe中的iframe”,您可以參考此頁面: http : //blog.cakemail.com/the-iframe-cross-domain-policy-problem/
HTML5:
window.postMessage,請參考此頁: https : //developer.mozilla.org/en-US/docs/Web/API/window.postMessage
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.