HTML5 postMessage解决跨域、跨iframe窗口消息传递

本文主要是介绍HTML5 postMessage解决跨域、跨iframe窗口消息传递,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


主页面 接收消息:

<#-- 页头 -->
<#assign pageTitle><@spring.message "secure.video.sidebar.videograb"/></#assign>
<#assign currentNav="video">
<#include "/secure/commons/header.ftl"><#-- 导入macros -->
<#include "/commons/macros.ftl"><div class="container-fluid"><div class="row"><#-- 左侧栏 --><#assign sidebarNav="videoGrab"><#include "/secure/commons/sidebar-video.ftl"><div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main"><h3 class="page-header"><@spring.message "secure.video.sidebar.videograb"/></h3><iframe src="http://grab.polyv.net/grab/login?userId=${userid!''}&ts=${ts!''}&sign=${sign!''}" id="grabvideo" frameborder="0" scrolling="no" width="100%" height="100%" ></iframe></div> </div>
</div><script src="/assets/js/libs/jquery/jquery-1.11.1.min.js"></script><script>$(function(){//接收 子页面的通信信息window.addEventListener('message',function(e){var height=e.data;console.log(height);$('#grabvideo').css("height",height+100); },false);
});</script><#-- 页脚 -->
<#include "/secure/commons/footer.ftl">



iframe子页面 发送消息: (将本页面的body高度,发送到父页面)

<script src="/resources/js/jquery-1.7.2.js"></script>
<script type="text/javascript">$(".container").css({'margin-top' : '-55px','width' : '95%'
});
//向polyv的父iframe页面传递高度
$(function(){var height=3000;height=$(document.body).height();window.parent.postMessage(height,"*");
});</script>


参考文档:

先是主页面HTML代码

[html]  view plain  copy
  1. <section id="wrapper">  
  2.     <header><h1>postMessage (跨域)</h1></header>  
  3.     <article>  
  4.         <form>  
  5.             <p>  
  6.                 <label for="message">给iframe发一个信息:</label><input type="text" name="message" value="son" id="message" />  
  7.                 <input type="submit" />  
  8.             </p>  
  9.         </form>  
  10.         <h4>目标iframe传来的信息:</h4>  
  11.         <p id="test">暂无信息</p>  
  12.             <iframe id="iframe" src="xiebiji.com/works/postmessage/iframe.html"></iframe>  
  13.     </article>  
  14. </section>  

然后是iframe的HTML代码

[html]  view plain  copy
  1. <form>  
  2.     <p>  
  3.         <label for="message">给父窗口发个信息:</label><input type="text" name="message" value="dad" id="message" />  
  4.         <input type="submit" />  
  5.     </p>  
  6. </form>  
  7. <p id="test">暂无信息。</p>  

然后是主页面中的JS代码

[javascript]  view plain  copy
  1. var win = document.getElementById("iframe").contentWindow;  
  2. document.querySelector('form').οnsubmit=function(e){  
  3.     win.postMessage(document.getElementById("message").value,"*");  
  4.     if (e.preventDefault){  
  5.         e.preventDefault();  
  6.     }  
  7.     e.returnValue = false;  
  8. }  

关键代码就一句: win.postMessage(document.getElementById("message").value,"*");
postMessage是通信对象的一个方法,所以向iframe通信,就是iframe对象调用postMessage方法。postMessage有两个参数,缺一不可。第一个参数是要传递的数据,第二个参数是允许通信的域,“*”代表不对访问的域进行判断,可理解为允许所有域的通信。

然后是iframe中的JS代码

[javascript]  view plain  copy
  1. var parentwin = window.parent;  
  2. window.onmessage=function(e){  
  3.     document.getElementById("test")。innerHTML = e.origin + "say:" + e.data;  
  4.     parentwin.postMessage('HI!你给我发了"<span>'+e.data+'"</span>。',"*");  
  5. };  
注:e.data包含传送过来的数据,e.origin指代源域

这篇关于HTML5 postMessage解决跨域、跨iframe窗口消息传递的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/982829

相关文章

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

XML重复查询一条Sql语句的解决方法

《XML重复查询一条Sql语句的解决方法》文章分析了XML重复查询与日志失效问题,指出因DTO缺少@Data注解导致日志无法格式化、空指针风险及参数穿透,进而引发性能灾难,解决方案为在Controll... 目录一、核心问题:从SQL重复执行到日志失效二、根因剖析:DTO断裂引发的级联故障三、解决方案:修复

IDEA Maven提示:未解析的依赖项的问题及解决

《IDEAMaven提示:未解析的依赖项的问题及解决》:本文主要介绍IDEAMaven提示:未解析的依赖项的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录IDEA Maven提示:未解析的依编程赖项例如总结IDEA Maven提示:未解析的依赖项例如

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动

HTML input 标签示例详解

《HTMLinput标签示例详解》input标签主要用于接收用户的输入,随type属性值的不同,变换其具体功能,本文通过实例图文并茂的形式给大家介绍HTMLinput标签,感兴趣的朋友一... 目录通用属性输入框单行文本输入框 text密码输入框 password数字输入框 number电子邮件输入编程框

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h