iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >Html5中怎么利用postMessage实现跨域消息传递
  • 866
分享到

Html5中怎么利用postMessage实现跨域消息传递

2024-04-02 19:04:59 866人浏览 薄情痞子
摘要

HTML5中怎么利用postMessage实现跨域消息传递,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、同源策略  &

HTML5中怎么利用postMessage实现跨域消息传递,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一、同源策略

    要理解跨域,我们首先要知道什么是同源策略。百度百科上这样定义同源策略:同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说WEB是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。

    何谓同源:如果两个URL的域名、协议、端口相同,则表示他们同源。

    浏览器的同源策略,限制了来自不同源的"document"或脚本,对当前"document"读取或设置某些属性。 (白帽子讲web安全[1])。根据这个策略,a.com域名下的javascript无法跨域操作b.com域名下的对象。比如,baidu.com域名下的页面中包含的JavaScript代码,不能访问Google.com域名下的页面内容。

    JavaScript必须严格遵循浏览器的同源策略,包括ajax(事实上,Ajax也是由JavaScript组成)。通过XMLHttpRequest对象实现的Ajax请求,不能向不同的域提交,比如,在abc.test.com下的页面,不能向def.test.com提交Ajax请求。运用了同源策略之后,用户就能确保自己正在查看的页面确实来自于正在浏览的域。

    同源策略在现实应用中是十分重要的。假设攻击者利用Iframe把真正的银行登录页面嵌到他的页面上,当用户使用真实的用户名、密码登录时,该页面就可以通过JavaScript读取到用户表单中的内容,这样用户名和密码信息就被泄漏了。

    在浏览器中,<script>、<link>、<img>、<iframe>等标签都可以加载跨域资源,不受同源策略限制,但是通过src加载的资源,浏览器限制了javascript的权限,不能进行各种的读写。从而,即使请求发了,敏感数据回来了,也是取不到的。

二、postMessage实现跨域

   语法:window.postMessage(msg,targetOrigin)

    window: 指目标窗口,可能是window.frames属性的成员或者由window.open方法创建的窗口

    message:要发送的消息,html5规范中提到该参数可以是JavaScript的任意基本类型或可复制的对象,然而并不是所有浏览器都做到了这点儿,部分浏览器只能处理字符串参数,所以我们在传递参数的时候需要使用JSON.stringify()方法对对象参数序列化,在低版本IE中引用json2.js可以实现类似效果

    targetOrigin:“目标域“,包括:协议、主机名、端口号。若指定为”*“,则表示可以传递给任意窗口,指定为”/“,则表示和当前窗口的同源窗口。

    获取postMessage传来的消息:为页面添加onmessage事件

XML/HTML Code复制内容到剪贴板

  1. window.addEventListener('message',function(e) {   

  2.        

  3. }  

    onmessage事件接受一个参数e,它是一个event对象。

    e的几个重要属性:

      1、data:postMessage传递过来的msg

      2、发送消息的窗口对象

      3、origin:发送消息窗口的源(协议+主机+端口号)

     来写一个简单的demo:

     http://source.com/source.html用来发送数据:

XML/HTML Code复制内容到剪贴板

  1. <iframe id="iframe" src="http://target.com/target.html"></iframe>  

  2. <input id="msg" type="text" placeholder="请输入要发送的消息">  

  3. <button id="send">发送</button>  

  4.   

JavaScript Code复制内容到剪贴板

  1. window.onload =function() {   

  2.     document.getElementById('send').onclick = function() {   

  3.     var msg = document.getElementById('msg').value;   

  4.     var iframeWindow = document.getElementById('iframe').contentWindow;   

  5.     iframeWindow.postMessage(msg,"http://target.com/target.html");   

  6.     }   

  7. }   

     http://target.com/target.html用来接收数据: 

XML/HTML Code复制内容到剪贴板

  1. <div>  

  2.    <h3>target.html,以下是接收到的消息:</h3>  

  3.     <section id="msg">  

  4.            

  5.     </section>  

  6. </div>  

JavaScript Code复制内容到剪贴板

  1. window.onload = function() {   

  2.   

  3.     if(window.addEventListener){   

  4.         window.addEventListener("message", handleMessage, false);   

  5.     }   

  6.     else{   

  7.         window.attachEvent("onmessage", handleMessage);   

  8.     }     

  9.   

  10.     function handleMessage(event) {   

  11.         event = event || window.event;   

  12.   

  13.         if(event.origin === 'http://source.com') {   

  14.             document.getElementById('msg').innerHTML = event.data;   

  15.         }   

  16.     }   

  17. }   

  18.   

看完上述内容,你们掌握Html5中怎么利用postMessage实现跨域消息传递的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网html频道,感谢各位的阅读!

--结束END--

本文标题: Html5中怎么利用postMessage实现跨域消息传递

本文链接: https://www.lsjlt.com/news/71776.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Html5中怎么利用postMessage实现跨域消息传递
    Html5中怎么利用postMessage实现跨域消息传递,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、同源策略  &...
    99+
    2024-04-02
  • html5中postMessage如何解决跨域、跨窗口消息传递
    这篇文章主要介绍了html5中postMessage如何解决跨域、跨窗口消息传递,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。平时做web开...
    99+
    2024-04-02
  • HTML5中怎么利用postMessage实现Ajax跨域请求
    今天就跟大家聊聊有关HTML5中怎么利用postMessage实现Ajax跨域请求,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 常规的几...
    99+
    2024-04-02
  • 怎么在html5中实现跨文档消息传输
    怎么在html5中实现跨文档消息传输?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。代码如下:window.addEventListener("message"...
    99+
    2023-06-09
  • 使用postMessage怎么实现iframe跨域
    今天就跟大家聊聊有关使用postMessage怎么实现iframe跨域,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。postMessage是什么此处引用MDN关于postMessag...
    99+
    2023-06-09
  • 小程序怎么实现跨页传递事件消息和数据
    本篇内容主要讲解“小程序怎么实现跨页传递事件消息和数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“小程序怎么实现跨页传递事件消息和数据”吧!一.需求分析此类需求大概意思是:A 页面进入 B 页...
    99+
    2023-06-26
  • HTML5中如何使用postMessage实现两个网页间传递数据
    本篇内容主要讲解“HTML5中如何使用postMessage实现两个网页间传递数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5中如何使用postMe...
    99+
    2024-04-02
  • Vue怎么使用postMessage实现父子跨域通信
    这篇文章主要讲解了“Vue怎么使用postMessage实现父子跨域通信”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue怎么使用postMessage实现父子跨域通信”吧!一、跨域通信子...
    99+
    2023-07-04
  • 利用SpringMVC怎么实现跨域
    利用SpringMVC怎么实现跨域?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. 什么是跨域跨域,即跨站HTTP请求(Cross-site HTTP req...
    99+
    2023-05-31
    springmvc 跨域
  • 使用iframe和postMessage怎么实现页面跨域通信
    这篇文章将为大家详细讲解有关使用iframe和postMessage怎么实现页面跨域通信,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。通常情况下,对于两个不同页面的脚本,只有当执行它们的页面...
    99+
    2023-06-09
  • 怎样实现Errai 2.0中的异步消息传递框架
    怎样实现Errai 2.0中的异步消息传递框架,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Errai是JBoss开发的一个基于GWT的框架,使用下一代WEB技术,用于构建富客...
    99+
    2023-06-17
  • threadlocal跨线程传递怎么实现
    要实现ThreadLocal的跨线程传递,可以使用InheritableThreadLocal类。InheritableThread...
    99+
    2023-09-26
    threadlocal
  • vue中iframe使用以及结合postMessage实现跨域通信
    目录使用场景需求iframe使用基本使用常用属性iframe高度自适应获取iframe的内容同域下获取父级/子级内容iframe跨域postMessage通信在vue中使用使用场景 ...
    99+
    2024-04-02
  • Vue 中怎么利用Ajax实现跨域请求
    这篇文章给大家介绍Vue 中怎么利用Ajax实现跨域请求,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一.设置config/index.js || proxyTable添加proxyT...
    99+
    2024-04-02
  • HTML5 WebSocket怎么实现消息推送
    这篇“HTML5 WebSocket怎么实现消息推送”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看...
    99+
    2024-04-02
  • C#利用RabbitMQ实现点对点消息传输
    目录消息队列模型RabbitMQ设置RabbitMQ动态库安装RabbitMQ.Client相关知识点示例效果图核心代码消息队列模型 所有 MQ 产品从模型抽象上来说都是一样的过程...
    99+
    2024-04-02
  • Java中的跨域请求怎么利用CORS实现
    这期内容当中小编将会给大家带来有关Java中的跨域请求怎么利用CORS实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。使用前后端分离模式开发项目时,往往会遇到这样一个问题 -- 无法跨域获取服务端数据这...
    99+
    2023-05-31
    java cors 跨域请求
  • c#跨窗体传递数据怎么实现
    在C#中,可以通过使用委托来实现跨窗体的数据传递。 首先,在发送数据的窗体中定义一个委托类型和事件,用于传递数据: public d...
    99+
    2024-03-02
    c#
  • 如何使用AQ实现异步消息传递和处理
    要使用AQ(Advanced Queuing)实现异步消息传递和处理,首先需要在Oracle数据库中创建一个队列和一个相关联的队列表...
    99+
    2024-03-02
    AQ
  • 怎么用JS中的window.name实现跨域数据传输
    这篇文章主要讲解了“怎么用JS中的window.name实现跨域数据传输”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用JS中的window.name实现跨域数据传输”吧!一、 wind...
    99+
    2023-06-29
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作