iframe通信

直奔主题

1 http://miku.com/a & http://miku.com/b

2 http://miku.com/a &  http://rin.miku.com/b

3 http://localhost:8888/a & https://b

如上

只有第一种情况 完全没有跨域问题 能顺畅访问

第二种情况  因为主域名相同 所以可以对它们同时设置相同的域名后缀domin 可以解决跨域问题

第三种情况  协议 端口 域名 都不相同! (下面讨论)

对于古董浏览器(如 ie6 7 8 ) 一种解决方案

父->子 可在hash上传递  或者 信息直接放到url上  hash传的可通过hashchange监听

子->父 需要个代理iframe(没有跨域问题) 代理iframe是隐藏在子中的 这个iframe可以拿到parent的一系列属性方法

对于正常人的浏览器 postMessage (ie8+)解决方案

postMessage 是window上的方法 使用起来也非常方便 下面给个简单例子

<!--http://127.0.0.1/-->
    <iframe id="ife" src="http://miku.com" ></iframe>
with(document.getElementById(‘ife‘))
            onload = function(){
                 contentWindow.postMessage(‘萌!‘,‘*‘);
             };
        onmessage = function(e){
            e = e || event;
            alert(e.data); //你也萌!
        }
//http://miku.com
        onmessage = function(e){
            e = e || event;
          alert(e.data); //萌
          e.source.postMessage(‘你也萌!‘,‘*‘);
        };

弹出 ‘萌!‘ -> ‘你也萌!‘

postMessage 第一个参数是需要发送的消息  第二个就是接受者的源 这里暴力的写为‘*‘  当然也可以给出具体的值(如ife src)

x.contentWindow.PostMessage可理解为用来触发x.contentWindow.onmessage的 就像订阅发布一样

在这个例子中 双方互相监听了 并且也互相发送了消息  非常的简单。

*坑

postMessage 第一个参数在ie10和现代浏览器中 我们是可以传递对象的 但是在ie8中 就算传了过去 [object object]  也并不可以获取到值!

所以 当要传json对象的时候 最好先序列化为字符串  接收到以后我们再解析它!

时间: 2024-10-14 20:16:21

iframe通信的相关文章

iframe跨域通信方案

概述 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦.这里把涉及到跨域的一些问题简单地整理一下: 首先什么是跨域,简单地理解就是因为JavaScript同源策略的限制,a.com 域名下的js无法操作b.com或是c.a.com域名下的对象.更详细的说明可以看下表: 对于主域相同子域不同的通信方法这里不一一列举了,这里主要讲解一下跨主域的通信问题. postMessage方法 window.postMe

[HTML5_WebWorkers]HTML5 web通信(跨文档通信/通道通信)简介

一.简单概要 web通信(洋名:web messaging)是一种文档中独立的浏览上下文间的DOM不会被恶意的跨域脚本暴露数据分享方式. 得得得,术语啊什么的,比看到凤姐还头疼.有必要把上面一句话拆开讲: web通信是一种数据分享方式(有屁话之嫌): 通信的主体是“浏览上下文”(这是纳尼?): 哦,“浏览上下文”呢是“一个将 Document对象呈现给用户的环境”,你可以近似理解为平常我们看到的某个页面所处的环境: web通信不会有DOM被恶意暴露的危险: 目前应用比较多的就是iframe之间的

post跨域请求

[名词解释] 跨域:https://developer.mozilla.org/en-US/docs/JavaScript/Same_origin_policy_for_JavaScript 同源策略(注意Network Access这一节):http://www.w3.org/Security/wiki/Same_Origin_Policy [问题描述] 浏览器出于安全的考量(避免恶意网站轻易读取其他网站显示的内容,因为该内容可能含有敏感信息,想象iframe嵌套银行网页)原则上允许跨域写而限

使用FormData实现ajax文件异步上传

1.传统的web开发文件上传一般是基于form表单的文件上传,同步的方式,用户体验差,可控性也差 2.异步上传的实现 有以下方式 2.1 借助浏览器插件 一般需要安装一些类似flash的插件  这种方式 缺点:需要安装插件  优点:可控性强,性能高 2.2 这种是伪异步上传,借助表单向隐藏的iframe提交,然后通过iframe通信操作当前页面 这种方式可控行查,体验一般,见下面代码  2.3 借助html5 里的 FormData 对象,可实现进度控制,异步的上传方式,见代码 iframe方式

HTML5:使用postMessage实现Ajax跨域请求

HTML5:使用postMessage实现Ajax跨域请求 由于同源策略的限制,Javascript存在跨域通信的问题,典型的跨域问题有iframe与父级的通信等. 常规的几种解决方法: (1) document.domain+iframe: (2) 动态创建script: (3) iframe+location.hash: (4) flash. 这里不细说这几种方法,记录的是HTML5的window.postMessage.postMessage兼容IE8+.Firefox.Opera.Saf

APEC 后,京城的雾霾反攻倒算了

今天小雪,我最爱的射手座始,我最爱的天蝎座结束了.嗯,我最爱的好多. APEC 之后,还有两个会,一个在东盟,一个在澳洲.基本上,这是一次没有世界大战的全球势力重组.我们有幸作为成年人生活在这个时代,而不用经历世界大战.我们每个人都置身其中,只是除了地铁封站,调休和限行之外,没有什么直接感受罢了. 冰儿问我什么是工业革命4.0?且问德国和美国谁更有希望?我说,第一次工业革命的时候,需要百万级人口规模的民族可以搞,于是英法都搞成了.第二次工业革命,需要千万级人口规模的民族搞,于是英法德美俄日等国都

跨域post请求实现方案小结--转

[名词解释] 跨域:https://developer.mozilla.org/en-US/docs/JavaScript/Same_origin_policy_for_JavaScript 同源策略(注意Network Access这一节):http://www.w3.org/Security/wiki/Same_Origin_Policy [问题描述] 浏览器出于安全的考量(避免恶意网站轻易读取其他网站显示的内容,因为该内容可能含有敏感信息,想象iframe嵌套银行网页)原则上允许跨域写而限

JS的跨域问题

1.什么是跨域? 跨域问题是由于javascript语言安全限制中的同源策略造成的. 2.什么是同源策略: 同源策略是指一段脚本只能读取来自同一来源的窗口和文档的属性,这里的同一来源指的是主机名.协议和端口号的组合.不同源的‘document’或脚本在没有明确授权的情况下,不能读写对方的资源. 同域要求两个站点同协议,同域名,同端口号. 对于javascript来说,当javascript被浏览器认为来自不同源时,请求被拒绝.注意:对当前页面来说,js文件存放的域并不重要,重要的是加载js的页面

jQuery 2.0.3 源码分析 Deferrred概念

转载http://www.cnblogs.com/aaronjs/p/3348569.html JavaScript编程几乎总是伴随着异步操作,传统的异步操作会在操作完成之后,使用回调函数传回结果,而回调函数中则包含了后续的工作.这也 是造成异步编程困难的主要原因:我们一直习惯于“线性”地编写代码逻辑,但是大量异步操作所带来的回调函数,会把我们的算法分解地支离破碎.此时我们不能 用if来实现逻辑分支,也不能用while/for/do来实现循环,更不用提异步操作之间的组合.错误处理以及取消操作了.