Chrome浏览器如何在窗口与其IFrame之间交换数据(窗口在1个域名上,IFrame从其他域名加载内容)?
我的问题是,浏览器如何将JS对象发送到IFrame?是用HTTP请求还是其他一些网络协议完成的?
我无法在Chrome的网络标签中看到它,这就是我想知道的原因
答案 0 :(得分:3)
TLDR; 因为父窗口可以直接获取iframe Window
,所以浏览器可以使用离线的,基于事件的通信协议进行通信。
在这种情况下不需要网络协议,因为父窗口可以直接引用嵌入式iframe的Window
对象(使用HTMLIFrameElement.contentWindow
,然后可以使用MessageEvent
来监听{{ 1}}为s)。
当父窗口调用otherWindow.postMessage(...)
时,该邮件为serialized internally
并传递给otherWindow
,Window
会自动反序列化对象,只要iframe MessageEvent
正在通过为message
注册事件监听器来监听window.addEventListener("message", function(event) {
// passed offline using serialization algorithm specified in spec (2.9.1)
console.log(event.data); // contains deserialized object
});
,如下所示:
removeGestureRecognizer
答案 1 :(得分:1)
您无法将JavaScript对象传递给iFrame
,但您仍然可以访问iFrame
中的元素,如下所示:
$('#iframeId').contents().find('iframe').contents().find('#element');
它将访问元素(假设隐藏字段)并设置您需要传递的值并在iFrame
内容中使用它。
答案 2 :(得分:-1)
应该能够读取全局变量。
<script>var masterOfTheUniverse = "He-Man";</script>
应该可以从iFrame内外的任何地方看到。
或者,您可以使用浏览器存储
// Store
localStorage.setItem("masterOfTheUniverse", "He-Man");
// Retrieve
localStorage.getItem("masterOfTheUniverse");