关于利用postMessage解决跨域问题的一点小疑问
今天自己动手做这个小实验的时候,发现了这样一个现象
发送端代码
<body>
<iframe id="ifr" src="http://182.254.243.216/receive.html"></iframe>
<script type="text/javascript">
var i = 1;
window.onload = function() {
var ifr = document.getElementById('ifr');
var targetOrigin = 'http://181.**4.**3.216'; //本人的腾讯云服务器地址
setInterval(() => {
ifr.contentWindow.postMessage(`第${i++}次发送数据`, targetOrigin);
}, 500)
};
</script>
</body>
//接收端代码
<body>
<h2>接收端</h2>
<div id="result"></div>
<script>
var result = document.getElementById('result');
window.addEventListener('message', function(event) {
document.write(event.data); //问题的关键在这里
// result.innerText = event.data;
// console.log(event.data);
}, false);
</script>
</body>
问题的关键是,我尝试用了三种方法来实现实时展示数据变化,用result.innerText = event.data和console.log(event.data)都没问题,如下图
但是用document.write(event.data)的时候,页面就只显示'第1次发送数据'然后就不走了(如下图)。不知道为什么
谢谢~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
额 这是
document.write()
的问题呀举个例子,你在接收端中写了 如下代码:
document.write();每次执行,文档的内容都没了,脚本自然也就没了。
下面两个图,第一个是执行一次document.write之后dom结构,可以发现,iframe中的内容只有你输出的第一次请求,script脚本也都没了。document.write()完全重写了文档。
第二个图示使用 innerText 可以看到 脚本什么的都在,因此可以一直执行
document.write会把body中所有代码清空的。
你用控制台查看一下你的那块区域就知道了。。