跨域

同源策略:为保障用户信息安全,防止恶意网站窃取数据的一种安全策略。


“同源”:协议相同、域名相同、端口号相同


“非同源”:

 1.Cookie、LocalStorage和IndexedDB无法读取
2.DOM无法获取
3.AJAX请求无效(可以发送,但浏览器拒绝响应)

Iframe

Iframe元素可以在当前网页之中,嵌入其他网页。每个iframe元素形成自己的窗口,即有自己的window对象。iframe之中的脚本,可以获得父窗口和子窗口。但是在同源的情况下,父窗口和子窗口才能通信;如果跨域,就无法拿到对方的DOM。

domain属性

如果两个窗口一级域名相同,只是二级域名不同,可以通过设置document.domain来使其通信。

通过设置document.domain只能获取DOM,而Cookie、LocalStorage和IndexedDB无法获取。

锚点值

又称为片段标识符,指的是URL的#后面的部分。如果只是改变片段标识符,页面不会重新刷新。

父窗口可以把信息,写入子窗口的锚点值

var src = originURL + "#" + data;
document.getElementById("myIframe").src = src;

子窗口通过监听hashchange事件得到通知

    window.onhashchange = checkMessage;
function checkMessage(){
var message = window.location.hash;
...
}

XDM

跨文本消息传递(cross-document messaging),简称XDM,指来自不同域的页面间传递消息。

postMessage(),参数1表示消息值,参数2表示接收方是来自哪个域的字符串。

    var iframeWindow = document.getElementById("rayframe").contentWindow,
iframeWindow.postMessage("A secret","http://www.wrox.com");

接收XDM消息时,会触发window对象的message事件。这个事件以异步形式触发,因此从发送消息到接收消息可能经过一段时间的延迟。触发message事件后,传递给onmessage事件对象包含一下三方面重要信息:

1.data:作为postMessage()第一个参数传入的字符串数据

2.origin:发送消息的文档所在的域

3.source:发送消息的文档的window对象的代理。这个代理对象的主要用于在发送上一条消息的窗口中调用postMessage()方法。

    父窗口:
<iframe src="http://www.xiaokeai.com"></iframe>
window.onmessage = function(e){
if(e.origin == "http://www.wrox.com"){
//处理接收到的数据
processMessage(e.data);
//可选,向来源窗口发送回执
e.source.postMessage("Received","http://p2p.wrox.com")
}
} 子窗口:
if(window.parent !== window.self){
window.parent.postMessage("xiaohuochai","http://fatherxiaokeai.com");
}

跨域-iframe的更多相关文章

  1. 跨域iframe的高度自适应

    If you cannot hear the sound of the genuine in you, you will all of your life spend your days on the ...

  2. 使用postMesssage()实现跨域iframe页面间的信息传递----转载

    由于web同源策略的限制,当页面使用跨域iframe链接时,主页面与子页面是无法交互的,这对页面间的信息传递造成了不小的麻烦,经过一系列的尝试,最后我发现有以下方法可以实现: 1. 子页面url传参 ...

  3. 完美实现跨域Iframe高度自适应【Iframe跨域高度自适应解决方案】

    Iframe的强大功能偶就不多说了,它不但被开发人员经常运用,而且黑客们也常常使用它,总之用过的人知道它的强大之处,但是Iframe有个致命的“BUG”就是iframe的高度无法自动适应,这一点让很多 ...

  4. javascript跨域通信(一):利用location.hash实现跨域iframe自适应

    页面域关系: a.html所属域A:www.A.comb.html所属域B:www.B.com 问题本质: js对跨域iframe访问问题,因为要控制a.html中iframe的高度和宽度就必须首先读 ...

  5. 谷歌、火狐浏览器下实现JS跨域iframe高度自适应的完美解决方法,跨域调用JS不再是难题!

    谷歌.火狐浏览器下实现JS跨域iframe高度自适应的解决方法 导读:今天开发的时候遇到个iframe自适应高度的问题,相信大家对这个不陌生,但是一般我们都是在同一个项目使用iframe嵌套页面,这个 ...

  6. 跨域iframe高度计算

    一.同域获取iframe内容 这里有两个细节: 1. 取iframe内的文档对象,标准浏览器使用contentDocument属性,IE低版本(IE6,7,8)使用document属性. 2. cal ...

  7. [转载]跨域iframe高度自适应

    场景: 经常会有这样的需求,跟外部合作伙伴合作,要嵌入别人的页面,这时候就需要高度自适应了,在这种跨域的情况下如何解决呢? 解决: 在iframe(合作伙伴的页面,称为P页面)中创建一个隐藏的ifra ...

  8. JS操作未跨域iframe里的DOM

    这里简单说明两个方法,都是未跨域情况下在index.html内操作b.html内的 DOM. 如:index.html内引入iframe,在index内如何用JS操作iframe内的DOM元素? 先贴 ...

  9. 跨域iframe高度自适应(兼容IE/FF/OP/Chrome)

    采用JavaScript来控制iframe元素的高度是iframe高度自适应的关键,同时由于JavaScript对不同域名下权限的控制,引发出同域.跨域两种情况. 由于客户端js使用浏览器的同源安全策 ...

  10. 跨域iframe高度自适应(兼容IE/FF/OP/Chrome)

    采用JavaScript来控制iframe元素的高度是iframe高度自适应的关键,同时由于JavaScript对不同域名下权限的控制,引发出同域.跨域两种情况. 由于客户端js使用浏览器的同源安全策 ...

随机推荐

  1. 译:面试投行的20个Java问题

    原文链接:https://dzone.com/articles/var-work-in-progress 作者:Anghel Leonard 译者:沈歌 如果你需要准备面试,可以看一下这篇博客中20个 ...

  2. 机器学习kNN

    from numpy import * import operator def createDataSet(): group = array([[1.0, 1.1], [1.0, 1.0], [0, ...

  3. urllib模块的使用

    Python3学习笔记(urllib模块的使用) 1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, ca ...

  4. PAT 1076 Forwards on Weibo

    #include <cstdio> #include <cstdlib> #include <vector> #include <queue> #inc ...

  5. oracle之数据同步:Oracle Sql Loader使用说明(大批量快速插入数据库记录)

    1.准备表数据 select * from emp10; create sequence seq_eseq increment start maxvalue ; --得到序列的SQL语句 select ...

  6. java 判断图片的类型

    // 这种方法如果遇到不是图片类型的文件会reader抛异常! public static void main(String[] args) throws IOException { // get i ...

  7. JSP初学者2

    <jsp:useBean id="name" class="classname" scope="page|request|session|app ...

  8. head标签必不可少的元素

    <head> 标签用于定义文档的头部,它是所有头部元素的容器.<head> 中的元素可以引用脚本.指示浏览器在哪里找到样式表.提供元信息等等. 文档的头部描述了文档的各种属性和 ...

  9. POJ-1759 Garland---二分+数学

    题目链接: https://cn.vjudge.net/problem/POJ-1759 题目大意: N个灯泡离地H_i,满足H1 = A ,Hi = (Hi-1 + Hi+1)/2 – 1,HN = ...

  10. T-SQL 基础 2

    运行结果: while 循环 运行结果: 运行结果 : if 判断语句 计算 1到100的基数 运行结果 1到100的偶数 运行结果 局部变量前缀是 @ 全局变量(包括系统变量) 前缀是 @@