PostMessager来对子父窗体进行跨域

一.为什么需要使用postMessage这个跨域技术

对于一个普通的页面而言,如果页面中的数据量太多时,会导致某个页面的数据量太多 二显得特别的臃肿,所以通常是使用iframe的方式来加载子页面,但是我们使用了iframe来加载子页面后,通常又涉及到子页面与父页面直接的信息的交替,比如我的父页面中有许多的功能时,会导致页面中的表单、表格、对话框(dialog)就很多,我们通常会将某些它们单独的分配到其他的子页面中去,如添加表单,但是当我们的表单添加功能,父页面是显示数据库中的数据同时包含了添加的数据,这时如果想要我的子页面中的表单提交后,我的父页面中的表格也相对的进行刷新同步时,我们就涉及到了子页面和父页面之间的信息的交互问题,这时我们通常是使用postMessage来进行交互。

二、使用postMessage常用的步骤

  1、在父页面添加监听

  //事件监听

window.addEventListener(‘message‘,function(e){
      var mes = e.data;
      alert(mes);
     if(mes == "app_refresh"){
       mediaTableObj.refresh();
   }
 },false);

  2、在子页面中当完成某个操作后进行交互中发送消息

  //发送消息 

  window.parent.postMessage("app_refresh",‘*‘);

三、具体的实例

A、父页面:

!DOCTYPE html>

<html>
  <head>
    <title>Post Message</title>
  </head>
  <body>
    <div style="width:200px; float:left; margin-right:200px;border:solid 1px #333;">
      <div id="color">Frame Color</div>
    </div>
    <div>
      <iframe id="child" src="test2.html"></iframe>
    </div>

<script type="text/javascript">
  window.addEventListener(‘message‘,function(e){
    var color=e.data;
    console.log(e);
    document.getElementById(‘color‘).style.backgroundColor=color;
  },false);
</script>
</body>
</html>

B、子页面

<!doctype html>

<html>
  <head>
  <style type="text/css">
    html,body{
      height:100%;
      margin:0px;
    }
  </style>
  </head>
  <body style="height:100%;">
    <div id="container" onclick="changeColor();" style="widht:100%; height:100%; background-color:rgb(204, 102, 0);">
      click to change color
    </div>

  </body>
  <script type="text/javascript">
    var container=document.getElementById(‘container‘);
    function changeColor () {
      var color=container.style.backgroundColor;
      if(color==‘rgb(204, 102, 0)‘){
        color=‘rgb(204, 204, 0)‘;
      }else{
        color=‘rgb(204,102,0)‘;
      }
      container.style.backgroundColor=color;
      window.parent.postMessage(color,‘*‘);
    }
  </script>
</html>

时间: 2024-10-15 17:30:20

PostMessager来对子父窗体进行跨域的相关文章

父页面操作iframe子页面的安全漏洞及跨域限制问题

一.父子交互的跨域限制 同域情况下,父页面和子页面可以通过iframe.contentDocument或者parent.document来交互(彼此做DOM操作等,如父页面往子页面注入css). 跨域情况下,就会有限制,无法相互操作. [解决办法] 1.主域不同 没招 2.主域相同,子域不同 以父(a.baidu.com)子(b.baidu.com)为例: 这俩页面相互操作,要是想解决跨域限制,必须设置一个共同的主域,即document.domain="baidu.com" 二.禁止父

iframe跨域访问父框架js方法

条件 1.不在同一个主域下 2.iframe调用父框架方法 环境说明 父框架有打开TAB页方法,但是子页面嵌入的是其他系统页面,同样需要打开TAB页. 方法描述 原理上就是通过子页面嵌入父框架页面来使用调用方法 父框架桥连页面 1 @{ 2 ViewBag.Title = "跨域桥连"; 3 Layout = "~/Views/Shared/_LayoutCenter.cshtml"; 4 } 5 6 @section Scripts{ 7 <script&g

iframe 跨域调用父级方法的方案

一.如果高层域名相同的话,可以通过document.domain来实现跨域访问 例如: 父级域名:localhost:8080 子级域名:localhost:9090 那么可以设置document.domain = 'localhost' 来实现跨域访问 二.如果域名没有相同之处 先来做一个假设:假如 我现在有两个系统,一个是工作流服务平台,其中一个功能就是"代办": 另一个是OA系统,现在我要在OA系统中直接嵌入工作流服务平台的代办页面,而代办页面的中,点击处理又会打开OA系统提供的

javascript 跨域子窗口关闭并刷新父窗口

//实现javascript 跨域子窗口关闭并刷新父窗口 function winOpen(url){            var win=window.open(url,'','height=480,width=670,top=300,left=300,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,location=no,status=no');              setInterval((function(win){retur

iframe跨域获取父页面url

iframe在跨域情况下, window.top.location.href 无法访问到. 可通过 document.referrer 访问到url,该属性是当前页面document的一个属性,记录这个页面的来源页面. 关于介绍更多的document.referrer内容: http://driftcloudy.iteye.com/blog/986265

同源策略与跨域技术

待整理:1-2参见<JavaScript高级程序设计>P586;3-5参见http://mp.weixin.qq.com/s/asmzA8a1HuYQxyx8K0q-9g 一.同源策略 https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy 浏览器的同源策略限制了 从一个源加载的文档或脚本与来自另一个源的资源的交互.它是隔离潜在恶意文档的关键安全机制. 具体限制: 不能通过ajax的方法去请求不同源的资源

HTML5笔记:跨域通讯、多线程、本地存储和多图片上传技术

最近做项目在前端我使用了很多新技术,这些技术有bootstrap.angularjs,不过最让我兴奋的还是使用了HTML5的技术,今天我想总结一些HTML5的技术,好记性不如烂笔头,写写文章可以很好的整理思路,写到博客里还能做个备忘. 1) 跨域通讯 现在做企业项目,前端很不自然的会大量使用iframe标签,我以前在文章里提到iframe是一个效率极其低下的标签,但是如果项目没有什么性能的苛求,使用iframe还是非常的方便的. 使用iframe经常碰到父子窗体通讯的问题,我们看看下面的代码:

浅谈WEB跨域的实现(前端向)

同源策略/SOP(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS.CSFR等攻击(可以参考我的这篇文章). SOP要求两个通讯地址的协议.域名.端口号必须相同,否则两个地址的通讯将被浏览器视为不安全的,并被block下来.比如“http页面”和“https页面”属于不同协议:“qq.com”.“www.qq.com”.“a.qq.com”都属于不同域名(或主机):“a.com”和“a.com:8000”属于不同端口

HTML5窗口间同域和跨域的通信

一丶同域下的 1.如果我们要操作iframe里面的元素,首先获取到引入的页面的window.获取iframe里面的window对象. var oIframe=getElementsByTagName('iframe')[0].contentWindow;    然后就可以对iframe里面的DOM元素进行操作了. 2.window.open()方法 window.open()方法会返回一个被打开页面的window对象. var newWindow=window.open('xx.html','_