同源通信

执行它们的页面位于具有相同的协议(http/https),端口(80/443),主机(通常为域名) 时,这两个脚本才能相互通信

大多数情况下,网站就是内部的域名,所以是同源通信,可以相互访问

非同源通信

不同域名,不同窗口,内嵌iframe(可能是外部域名地址) 这种就是非同源通信,

window.postMessage() 方法可以安全地实现跨源通信

来自H5 api,没想到吧,h5还有个这样的方法*.*

语法

otherWindow.postMessage(message, targetOrigin, [transfer]);

  1. otherWindow 其他窗口的一个引用,比如iframe的contentWindow属性、执行window.open返回的窗口对象、或者是命名过或数值索引的window.frames。

  2. message 将要发送到其他 window的数据,字符串,数字等 javascript 基本类型以及对象

  3. targetOrigin 通过窗口的origin属性来指定哪些窗口能接收到消息事件,其值可以是字符串"*"(表示无限制)或者一个URI。在发送消息的时候,如果目标窗口的协议、主机地址或端口这三者的任意一项不匹配targetOrigin提供的值,那么消息就不会被发送;只有三者完全匹配,消息才会被发送。这个机制用来控制消息可以发送到哪些窗口

用法

  1. 发送数据
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><input type="color" onchange="setMessage(this.value)">
<iframe id ='iframe' src="good.html"></iframe><script>// 发送消息var domain = 'http://localhost:63342';var iframe =  document.getElementById('iframe').contentWindow;var setMessage = function (color){iframe.postMessage(color,domain);}window.addEventListener('message',function(event){if(event.origin !== domain) returnconsole.log('main receive ' + event.data);})
</script>
</body>
</html>
  1. 监听事件,处理消息
<!DOCTYPE html>
<html lang="en"> <head> <meta charset="UTF-8"> <title>good</title> </head> <body> <h1 style="text-align: center;color: black;">看我在便颜色</h1> </body> <script>// 响应消息 window.addEventListener('message',function(event){ if(event.origin !== 'http://localhost:63342') return; document.body.style.backgroundColor = event.data; document.body.innerHTML = event.data; event.source.postMessage('good idea ',event.origin); },false); </script> </html>

转载于:https://www.cnblogs.com/telwanggs/p/11289723.html

window.postMessage 跨窗口,跨iframe javascript 通信相关推荐

  1. 【转】JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  2. JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  3. 页面嵌套iframe(window.postMessage()实现跨域通信)

    项目中的需求 需要外接一个iframe与主页面之间需要通信 的情况 在iframe 中: 在主页面中: window.postMessage() 方法可以安全地实现跨源通信.通常,对于两个不同页面的脚 ...

  4. 使用window.postMessage实现跨域通信

    JavaScript由于同源策略的限制,跨域通信一直是棘手的问题.当然解决方案也有很多: document.domain+iframe的设置,应用于主域相同而子域不同: 利用iframe和locati ...

  5. H5跨域通信 - window.postMessage

    一.简介 window.postMessage is a method for safely enabling cross-origin communication. Normally, script ...

  6. window.postMessage - 前端跨域通信

    window.postMessage - 前端跨域通信 window.postMessage() 语法 The dispatched event 安全问题 示例 注意 HTMLIFrameElemen ...

  7. ifrme嵌入外部页面,在外部页面调用本页面方法,window.postMessage实现跨域通信

    项目场景:vue页面开发的系统要继承外部系统页面,并且在外部系统页面调用本系统的方法,这样来看的话肯定会存在跨域的问题,而且直接调用方法的话,也不太安全,后来了解到window.postMessage ...

  8. window.postMessage跨文档通信

    window.postMessage 1.浏览器兼容情况:IE8+.chrome.firefox等较新浏览器都至此. 2.使用方法: a.otherWindow.postMessage( messag ...

  9. html5 postMessage解决跨域、跨窗口消息传递

    平时做web开发的时候关于消息传递,除了客户端与服务器传值还有几个经常会遇到的问题 1.页面和其打开的新窗口的数据传递 2.多窗口之间消息传递 3.页面与嵌套的iframe消息传递 4.上面三个问题的 ...

最新文章

  1. [LeetCode] Same Tree
  2. C#多线程 我的第一个多线程程序
  3. 批发电脑配件_2019年10月电脑配件表
  4. 小程序服务器1兆宽带够用,宽带经验 篇一:200M宽带,真的适合你吗?
  5. oracle字符查出一位
  6. 美网络司令部:马上修复严重的 PAN-OS 漏洞,免遭国家黑客攻击
  7. jquery获取php生成的元素,jquery怎么生成元素
  8. Python程序设计--第5章 函数设计与使用
  9. 【PCL自学:Feature7】基于转动惯量和偏心量的描述符 (持续更新)
  10. 咪咕阅读怎么下载小说
  11. 泥瓦匠:程序猿为啥要坚持写原创技术博客?
  12. 1.3 数值分析 有效数字
  13. RMQ与SparseTable(ST表)
  14. 《Java Web程序设计基础教程》简介
  15. 微积分学在计算机科学中的应用,浅谈微积分学在中学数学教学中的应用解答.doc...
  16. 问卷调查:vue element动态生成表单、表单校验以及表单提交
  17. OmniPlan,一款让你无法自拔的项目管理工具(仅适用于MAC系统)
  18. 智能摄像头为什么受到这么多人青睐?米家、智汀带你了解一下
  19. 电商!商品关键词查询搜索排名与优化
  20. 在飞书上定制 BOT 服务,Chatopera 机器人让办公更智能 | Chatopera

热门文章

  1. python lxml解析html,当使用lxml.html解析html时,等同于InnerHTML
  2. 网段和子网的区别_石笼网袋和石笼网的区别
  3. ESP8266固件烧录
  4. 自定义用户控件的使用
  5. 组态王授权产品id和授权锁id_软件加密授权工具推荐
  6. 【Arduino】OTTO机器人(做二次开发的一点点总结)
  7. Input 输入设备驱动框架
  8. Pentium的指令系统(2)——Pentium的指令系统
  9. linux路由内核实现分析(一)----邻居子节点(1)
  10. java中构造函数有什么用,java中的构造函数有什么用?用它有什么好处?在什么地方用?...