iframe跨域问题

利用postmessage跨域向子页面传父页面的window对象

代码:

1.父页面

    window_parent = this.window;
    var ifr = document.getElementsByClassName('video_iframe');
    ifr.contentWindow.postMessage(window_parent,target);

2.iframe页面

window.addEventListener('message',function(event){
   if(event.origin == 'https://xxx.com'){
         this.window = event.data;
    }
},false);

报错:

clipboard.png

postMessage这个api,MDN上说的是可以传对象的,却报这样的错

阅读 3.6k
5 个回答

文档看的不仔细呀……postMessage传送的这个message,是要能被The structured clone algorithm序列化的,你这直接把window怼进去了可不得报错么……
(手机发不了图,直接顺着原文找The structured clone algorithm点进去看看吧)

另外一个,有一个东西你得理解下,不管是BOM还是DOM,它们只是一套接口,面向被浏览器引擎渲染后的页面结构,就好像一扇门,装在墙上就能进屋,但拆下来运走就进不去这个屋了。

第一,window对象是不能被覆盖的

第二, 对象肯定传不过去的,更何况window对象

新手上路,请多包涵

直接传window对象不行 换成普通对象还是可以的

序列化一个对象,你可以用JSON.stringfy(obj),但是这里有一个问题,window对象结构复杂,你将会面临circular reference,所以,有个折中方案,就是你需要window的属性,将这些属性提取出来,拼装成一个新对象即可。
参考代码如下:

var data = JSON.stringify({
    'location': window.location
    // etc
});

stackoverflow

谢邀
window对象不能传递的,况且还跨域,安全问题很多啊
其实,你应该理一下你切实的需求,找找有没有其他的解决方案

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题