我想每隔几秒钟将一条消息从 iframe 传递到父页面,例如:
Iframe Domain = www.abc.com
Parent Domain = www.xyz.com
检查:
- 跨域 iframe 问题
- https://stackoverflow.com/questions/5203741/jquery-cross-iframe-script-loading-ownerdocument-issue
有人可以帮我吗?
我想每隔几秒钟将一条消息从 iframe 传递到父页面,例如:
Iframe Domain = www.abc.com
Parent Domain = www.xyz.com
检查:
有人可以帮我吗?
我最近刚刚帮助了另一个有类似问题的人,在 IFrame 之间传递消息。(请参阅IFrame 和父级之间的跨文档消息传递问题)。
使用我在上述主题中从suamikim借来的代码的修改版本,我集成了一个计时器。这对您来说应该是一个很好的起点。这些父 html 页面和子 html 页面将跨域工作,正如Amadan在上面的评论中所描述的那样。我刚刚测试并确认了这一点,将parent.html放在一个域上,该域指向一个完全独立的不受信任域上的child.html 。
父.html
<html>
<head>
<script type="text/javascript">
function parentInitialize() {
var count = 0;
window.addEventListener('message', function (e) {
// Check message origin etc...
if (e.data.type === 'iFrameRequest') {
var obj = {
type: 'parentResponse',
responseData: 'Response #' + count++
};
e.source.postMessage(obj, '*');
}
// ...
})
}
</script>
</head>
<body style="background-color: rgb(72, 222, 218);" onload="javascript: parentInitialize();">
<iframe src="child.html" style="width: 500px; height:350px;"></iframe>
</body>
</html>
child.html
<html>
<head>
<script type="text/javascript">
function childInitialize() {
// ...
try {
if (window.self === window.top) {
// We're not inside an IFrame, don't do anything...
return;
}
} catch (e) {
// Browsers can block access to window.top due to same origin policy.
// See https://stackoverflow.com/a/326076
// If this happens, we are inside an IFrame...
}
function messageHandler(e) {
if (e.data && (e.data.type === 'parentResponse')) {
// Do some stuff with the sent data
var obj = document.getElementById("status");
obj.value = e.data.responseData;
}
}
window.addEventListener('message', messageHandler, false);
setInterval(function () {
window.parent.postMessage({ type: 'iFrameRequest' }, '*');
}, 1000);
// ...
}
</script>
</head>
<body style="background-color: rgb(0, 148, 255);" onload="javascript: childInitialize();">
<textarea type="text" style="width:400px; height:250px;" id="status" />
</body>
</html>
祝你好运!