消息-JS HTML5跨域跨窗口通信postMessage问题求帮助

问题描述

JS HTML5跨域跨窗口通信postMessage问题求帮助
 this.exportUnits = d;                 var g = ""status=noresizable=noscrollbars=yespersonalbar=nodirectories=nolocation=notoolbar=nomenubar=nowidth=760height=530left=60top=80"";                 this.popupWindow = b.open(a.settings.multiPopupUrl" g);                 if (this.exportUnits && this.exportUnits.length) {                     var bs = JSON.stringify(this.exportUnits);                     this.popupWindow.postMessage(bs a.settings.multiPopupUrl)                 }

上述代码是打开一个新窗口同时postMessage一段消息到弹出的新窗口,但是弹出的新窗口有时收到有时收不到,收到的几率很少,求大神帮助

下面是新窗口接收的代码

 function loadImg() {     window.addEventListener(""message"" receiveMessage false); } function receiveMessage(event) {     alert(event.origin);     alert(event.data);     alert(event.source); } 

解决方案

你哪时注调用loadImg()这个放在注册onmessage事件的?不会是在body的onload事件中吧。。这样注册事件太晚了,你是打开窗口后就直接发信息了,你打开的窗口可能都还没注册onmessage事件先

注册onmessage事件不要放到onload中,script直接放到head标签中进行注册

 <head> function receiveMessage(event) {     alert(event.origin);     alert(event.data);     alert(event.source); } window.addEventListener(""message"" receiveMessage false);</head>

延时发送信息。这个延时时间不好确定,应为打开的页面依赖于网速,要是很慢,10多s才打开延时也无效了。。最好是发送信息的页面也注册onmessage事件,然后被打开的页面注册好事件后发送信息过来通知说我注册号事件了,你再发送信息过去。。这个逻辑你自己实现了,也不难~

  if (this.exportUnits && this.exportUnits.length) {                var me=this;                setTimeout(function(){              var bs = JSON.stringify(me.exportUnits);              me.popupWindow.postMessage(bs a.settings.multiPopupUrl)                }1000);//延时1秒发送信息 }

解决方案二:
页面一加载就注册事件。没注册上就没法收到消息
发送消息的时候,延时测试一下

解决方案三:
已经解决了,谢谢各位大神

解决方案四:
用的是 发送信息的页面也注册onmessage事件,然后被打开的页面注册好事件后发送信息过来通知说我注册号事件了,你再发送信息过去

时间: 2025-01-28 10:02:58

消息-JS HTML5跨域跨窗口通信postMessage问题求帮助的相关文章

window.opener方法的使用 js跨域

原文:window.opener方法的使用 js跨域 最近公司网站登陆加入了第三方登陆.可以用QQ直接登陆到我们网站,在login页面A中点QQ登陆时,调用了一个window.open文件打开一个login页窗口B,登陆后callback地址回调成功后,需要关闭当前window.open打开的login小窗口B,再将打开这个小窗口的原窗口页(A)刷新显示正确状态. 这时就用到了这个方法: window.opener.location.reload() 与 window.opener.locati

浅谈js中几种实用的跨域方法原理详解_javascript技巧

这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作是不同的域. 下表给出了相对http://store.company.com/dir/page.html同源检测的结果: 要解决跨域的问题,我们可以使用以下几种方法: 一.通过jsonp跨域 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的.但是,在页面上引入不同

js实现跨域的4种实用方法原理分析_javascript技巧

什么是js跨域呐? js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作是不同的域. 要解决跨域的问题,我们可以使用以下几种方法: 一.通过jsonp跨域 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的.但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的. 比如,有个a.html页面,

js中window.opener方法的跨域问题分析

最近公司网站登陆加入了第三方登陆.可以用QQ直接登陆到我们网站,在login页面A中点QQ登陆时,调用了一个window.open文件打开一个login页窗口B,登陆后callback地址回调成功后,需要关闭当前window.open打开的login小窗口B,再将打开这个小窗口的原窗口页(A)刷新显示正确状态. 这时就用到了这个方法: window.opener.location.reload() 与 window.opener.location.href=window.opener.locat

js中几种实用的跨域方法原理详解

1.这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作是不同的域. (1)下表给出了相对http://store.company.com/dir/page.html同源检测的结果: 要解决跨域的问题,我们可以使用以下几种方法: 一.通过jsonp跨域 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的.但是,在页面

Ajax跨域请求 JSON JSONP

同源策略和跨域-总结 目录: 1.同源策略 2.跨域 3.几种跨域技术   1.同源策略 什么叫同源? URL由协议.域名.端口和路径组成,如果两个URL的协议.域名和端口相同,则表示他们同源.相反,只要协议,域名,端口有任何一个的不同,就被当作是跨域. e.g. 对于http://store.company.com/dir/page.html进行同源检测: URL 结果 原因 http://store.company.com/dir2/other.html 成功 仅路径不同 http://st

前端跨域整理

前言 原文地址:前端跨域总结 博主博客地址:Damonare的个人博客 相信每一个前端er对于跨域这两个字都不会陌生,在实际项目中应用也是比较多的.但跨域方法的多种多样实在让人目不暇接.老规矩,碰到这种情况,就只能自己总结一篇博客,作为记录. 正文 1. 什么是跨域? 跨域一词从字面意思看,就是跨域名嘛,但实际上跨域的范围绝对不止那么狭隘.具体概念如下:只要协议.域名.端口有任何一个不同,都被当作是不同的域.之所以会产生跨域这个问题呢,其实也很容易想明白,要是随便引用外部文件,不同标签下的页面引

javascript跨域的4种方法和原理详解_javascript技巧

下表给出了相对http://store.company.com/dir/page.html同源检测的结果: 要解决跨域的问题,我们可以使用以下几种方法: 一.通过jsonp跨域 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的.但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的. 比如,有个a.html页面,它里面的代码需要利用ajax获取一个不同域上的json数据,假设这个json数据地址是http://example.com

javascript跨域方法、原理以及出现问题解决方法(详解)_javascript技巧

javascript跨域访问是web开发者经常遇到的问题,什么是跨域,一个域上加载的脚本获取或操作另一个域上的文档属性,下面将列出三种实现javascript跨域方法: 1.基于iframe实现跨域      基于iframe实现的跨域要求两个域具有aa.xx.com,bb.xx.com这种特点,也就是两个页面必须属于一个基础域(例如都是xxx.com,或是xxx.com.cn),使用同一协议(例如都是 http)和同一端口(例如都是80),这样在两个页面中同时添加document.domain