html5怎样进行跨域通信

这次给大家带来html5怎样进行跨域通信,怎么用h5进行跨域通信?h5进行跨域通信的注意事项有哪些,下面就是实战案例,一起来看一下。

最近工作中遇到一个需求,场景是:h5页作为预览模块内嵌在pc页中,用户在pc页中能够做一些操作,然后h5做出响应式变化,达到预览的效果。

这里首先想到就是把h5页面用iframe内嵌到pc网页中,然后pc通过postMessage方法,把变化的数据发送给iframe,iframe内嵌的h5通过addEventListener接收数据,再对数据做响应式的变化。

这里总结一下postMessage的使用,api很简单:

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

登录后复制

otherWindow是目标窗口的注意事项,在当前场景下就是iframe.contentWindow;

立即学习“前端免费学习笔记(深入)”;

message是发送的消息,在Gecko 6.0之前,消息必须是注意事项,而之后的版本可以做到直接发送对象而无需自己进行序列化;

targetOrigin表示设定目标窗口的origin,其值可以是字符串”*”(表示无限制)或者一个URI。在注意事项的时候,如果目标窗口的协议、主机地址或端口这三者的任意一项不匹配targetOrigin提供的值,那么消息就不会被发送;只有三者完全匹配,消息才会被发送。对于保密性的数据,设置目标窗口origin非常重要;

当postMessage()被调用的时,一个消息注意事项就会被分发到目标窗口上。该接口有一个message事件,该事件有几个重要的属性:

1.data:顾名思义,是传递来的message
2.source:发送消息的窗口对象
3.origin:发送消息窗口的源(协议+主机+端口号)

这样就可以接收跨域的消息了,我们还可以发送消息回去,方法类似。

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

那么,当iframe初始化后,可以通过下面代码获取到iframe的引用并发送消息:

// 注意这里不是要获取iframe的dom引用,而是iframe window的引用const iframe = document.getElementById('myIFrame').contentWindow;iframe.postMessage('hello world', 'http://yourhost.com');

登录后复制

在iframe中,通过下面代码即可接收到消息。

window.addEventListener('message', msgHandler, false);

登录后复制

在接收时,可以根据需要,对消息来源origin做一下过滤,避免接收到非法域名的消息导致的xss攻击。

最后,为了代码复用,把消息发送和接收封装成一个类,同时模拟了消息类型的api,使用起来非常方便。具体代码如下:

export default class Messager {    constructor(win, targetOrigin) {        this.win = win;        this.targetOrigin = targetOrigin;        this.actions = {};        window.addEventListener('message', this.handleMessageListener, false);    }     handleMessageListener = event => {        if (!event.data || !event.data.type) {            return;        }        const type = event.data.type;        if (!this.actions[type]) {            return console.warn(`${type}: missing listener`);        }        this.actions[type](event.data.value);    }     on = (type, cb) => {        this.actions[type] = cb;        return this;    }     emit = (type, value) => {        this.win.postMessage({            type, value        }, this.targetOrigin);        return this;    }     destroy() {        window.removeEventListener('message', this.handleMessageListener);    }}

登录后复制

相信看了这些案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

相关阅读:

注意事项

注意事项

注意事项

以上就是html5怎样进行跨域通信的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3125235.html

(0)
上一篇 2025年3月29日 19:42:51
下一篇 2025年3月29日 19:42:58

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • H5的所有元素及基本语法归纳

    这次给大家带来h5的所有元素及基本语法归纳,h5的元素及基本语法使用的注意事项有哪些,下面就是实战案例,一起来看一下。 HTML标签开始标签(opening tag):开放标签结束标签(closing tag):闭合标签 元素定义:注意事项…

    编程技术 2025年3月29日
    000
  • h5怎样唤醒app

    这次给大家带来用h5怎样唤醒app,怎么用h5唤醒app?  h5唤醒app的注意事项有哪些,下面就是实战案例,一起来看一下。 h5唤起app这种需求是常见的。在移动为王的时代,h5在app导流上发挥着重要的作用。 三种唤起方案 目前我们采…

    编程技术 2025年3月29日
    100
  • H5手机扫码怎么实现

    这次给大家带来h5手机扫码怎么实现,怎么用h5进行手机扫码怎么实现?h5进行手机扫码的注意事项有哪些,下面就是实战案例,一起来看一下。 解决的问题: 1.能够在微博客户端呼起摄像头扫描二维码并且解析; 2.能够在原生浏览器和微信客户端中扫描…

    编程技术 2025年3月29日
    100
  • 怎样做出H5响应式网页设计

    这次给大家带来怎样做出h5响应式网页设计,h5做出响应式网页设计的注意事项有哪些,下面就是实战案例,一起来看一下。 本文介绍了HTML5响应式(自适应)网页设计的实现,分享给大家,具体如下: 第一步:在网页代码的头部,加入一行viewpor…

    编程技术 2025年3月29日
    100
  • h5的移动端适配怎样实现

    这次给大家带来h5的移动端适配怎样实现,怎么适配h5的移动端?适配h5的移动端的注意事项有哪些,下面就是实战案例,一起来看一下。 在pc版网页(http://pc_url) 上,添加: 登录后复制登录后复制 在移动版网页(http://mo…

    编程技术 2025年3月29日
    100
  • HTML5存储方式小结

    本文主要和大家分享HTML5存储方式小结,希望能帮助HTML5开发者,也希望能帮助到大家更好的掌握HTML5存储方式。 cookies的野蛮生长 本地存储localstorage 本地存储sessionstorage 离线缓存(applic…

    编程技术 2025年3月29日
    100
  • H5怎样调用相机拍照并压缩图片

    这次给大家带来h5怎样调用相机拍照并压缩图片,怎么用h5调用相机拍照并压缩图片?h5调用相机拍照并压缩图片的图片有哪些,下面就是实战案例,一起来看一下。 整理文档,搜刮出一个H5调用相机拍照并压缩图片的实例代码,稍微整理精简一下做下分享。 …

    编程技术 2025年3月29日
    100
  • h5怎样实现获取用户地理定位

    这次给大家带来h5怎样实现获取用户地理定位,怎么用h5实现获取用户地理定位?h5实现获取用户地理定位的注意事项有哪些,下面就是实战案例,一起来看一下。 最近做的一个项目中有一个获取周围商户的功能,需要用到地理定位系统, 于是便想到了用 h5…

    编程技术 2025年3月29日
    100
  • H5表单验证失败该怎样提示

    这次给大家带来h5表单验证失败该怎样提示,怎么用h5表单验证失败的提示?h5表单验证失败提示的表单验证有哪些,下面就是实战案例,一起来看一下。 我们知道,前端的童鞋在写页面时, 都不可避免的总会踩到 表单验证这个坑.这时候, 我们就要跪了,…

    编程技术 2025年3月29日
    100
  • H5的地理定位怎样使用

    这次给大家带来h5的地理定位怎样使用,怎么使用h5的地理定位?h5地理定位的注意事项有哪些,下面就是实战案例,一起来看一下。 地理位置(Geolocation)是 HTML5 的重要特性之一,提供了确定用户位置的功能,借助这个特性能够开发基…

    编程技术 2025年3月29日
    100

发表回复

登录后才能评论