恭喜你成为UI中国推荐设计师 (详情)
//百度统计 20220402 uicn

您的意见是我们 UI 中国进步的动力!
点击立即反馈按钮,发表您的意见!
立即反馈
QQ群反馈
您也可以加入UI中国官方反馈群进行反馈!
群号:302892100
备注:反馈问题后@管理员能让我们及时了解您的意见

提交需求

赛事与广告咨询合作,请填写需求表单,我们会在第一时间与您联系!

0/20
0/200

设计大赛

  • 设计大赛
  • 发布广告
  • 发布招聘
  • 其它需求

提交完成
感谢您对UI中国的支持和信赖!
postMessage跨域、跨iframe窗口消息传递
0.0°





文章目录
1. 作用
2. 语法
3. 使用
4. 兼容性
5. 应用场景
说起postMessage 可能平时大家也不遇到,但是如果遇到问题了,又想不起它,这里记录下防止后面忘记它。


1. 作用
window.postMessage()方法可以安全地实现Window对象之间的跨域通信。例如,在一个页面和它生成的弹出窗口之间,或者是页面和嵌入其中的iframe之间。

通常情况下,受浏览器“同源策略”的限制跨域问题一直是个问题,window.postMessage()提供了一个受控的机制来安全地规避这个限制(如果使用得当的话)。

2. 语法
一般来说,一个窗口可以获得对另一个窗口的引用(例如,通过targetWindow=window.opener),然后使用targetWindow.postMessage()在其上派发MessageEvent。接收窗口随后可根据需要自行处理此事件,传递给window.postMessage()的参数通过事件对象暴露给接收窗口。

基本语法:

targetWindow.postMessage(message, targetOrigin, [transfer]);
1
targetWindow
targetWindow就是接收消息的窗口的引用。 获得该引用的方法包括:

Window.open
Window.opener
HTMLIFrameElement.contentWindow
Window.parent
Window.frames +索引值
message
要发送到目标窗口的消息。 数据使用结构化克隆算法进行序列化。 这意味着我们可以将各种各样的数据对象安全地传递到目标窗口,而无需自己对其进行序列化。

targetOrigin
定目标窗口的来源,必须与消息发送目标相一致,可以是字符串或URI。 表示任何目标窗口都可接收,为安全起见,请一定要明确提定接收方的URI。如果为"*"则都可以接收。

transfer
可选属性。是一串和message同时传递的Transferable对象,这些对象的所有权将被转移给消息的接收方,而发送一方将不再保有所有权。

3. 使用
postMessage程序

var receiver = document.getElementById('receiver').contentWindow;
var btn = document.getElementById('send');
btn.addEventListener('click', function (e) {
e.preventDefault();
var val = document.getElementById('text').value;
receiver.postMessage("Hello "+val+"!", "http://www.xxx.com");
});

接收端

window.addEventListener("message", receiveMessage, false);
function receiveMessage(event){
if (event.origin !== "http://www.xxx.com")
return;
}

event对象有三个属性,分别是origin,data和source。event.data表示接收到的消息;event.origin表示postMessage的发送来源,包括协议,域名和端口;event.source表示发送消息的窗口对象的引用; 我们可以用这个引用来建立两个不同来源的窗口之间的双向通信。

4. 兼容性

总体兼容性还是很好的!


5. 应用场景
跨域通信(包括GET请求和POST请求)
WebWorker
vue项目中使用到了iframe并且需要传递参数

————————————————
版权声明:本文为CSDN博主「zy1281539626」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/zy1281539626/article/details/114934551



蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务


标签: html js 前端知识总结


Powered by Froala Editor

更新:2021-03-19

收藏

0人已收藏

lanlanwork

www.lanlanwork.com

  • 769

    作品

  • 369

    粉丝

  • 6

    关注

  • 探索鼓舞人心的VR和AR界面设计:沉浸式体验之旅
  • ui 作品:B 端后台管理界面设计 —— 蓝蓝 UI 设计
  • 分享精彩车载 hud 界面欣赏 —— 蓝蓝 UI 设计
  • B 端后台管理界面欣赏分享 —— 蓝蓝 UI 设计公司
相关标签
设计分享ui

    猜你喜欢

      postMessage跨域、跨iframe窗口消息传递

      0.0°

      你确定要举报postMessage跨域、跨iframe窗口消息传递

      如果查出恶意举报,十天内禁止提交任何举报申请。

      0/200

      上传证据: 超过10M的附件请使用网盘地址

      点击上传附件

      对谁可见:

      全部设计师
      • 全部设计师
      • 推荐设计师和认证设计师

      您确认要推荐?

      该作品发布时间:2021年03月19日

      评分

      完整度

      启发性

      勤奋性

      排版布局

      推荐心得

      建议20-200字以内

      0/200

      0
      0
      0

      账号或密码错误,请重新输入

      账号或密码错误,请重新输入

      登录

      手机号

      发送验证码 120s 验证码错误

      登录
      第三方账号登录