问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JavaScript 怎么跨域获取 iframe 中的内容

发布网友 发布时间:2022-04-23 13:18

我来回答

1个回答

热心网友 时间:2022-04-20 00:27

要解释这个问题,首先要解释两个技术点。
每个“窗口”都是一个JS Runtime,即JS的运行时。如果只有一个窗口,那么就只有一个Runtime;如果一个窗口下面还有一个iframe,那么就有两个Runtime;以此类推。
Runtime之间互操作(或者通信)是有跨域*的。也就是说,如果这个窗口本身是a.baidu.com域名下的页面,那么如果这个页面下还有一个iframe,这个iframe中加载的页面是b.baidu.com域名下的。那么外层的JS。就不能跟这个iframe中的内容互操作(或者通信)。

因此外层Runtime中的JS想操作内层iframe中的内容,就必须要避免跨域*。要么内层iframe加载页面的域名跟外层是一样的。要么就是需要在内层iframe加载的页面中执行document.domain = '.com';从而设置跟外层的主域相同。

例如,当前页面是a.baidu.com/test.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

<html>
<head>
</head>
<body>
<iframe id="iFrm1" src="

<script>
document.domain = '.com';
var ifrm1 = document.getElementById('iFrm1');
ifrm1.onload = function(){
alert(ifrm1.contentWindow.document.getElementById('innerDiv').innerHTML);//弹出恭喜你操作到内部iframe中的元素了!!!
};
</script>
</body>
</html>

iframe中加载的页面内容如下:

1
2
3
4
5
6
7
8
9
10

<html>
<head>
</head>
<body>
<div id="innerDiv">恭喜你操作到内部iframe中的元素了!!!</div>
<script>
document.domain = '.com';
</script>
</body>
</html>

在HTML5中新增了postMessage的API。可以方便窗口跟内部iframe之间进行通信,并且可以实现跨主域通信。但是有一些*,1.老版本的浏览器一般不支持。2.父窗口只能向iframe中发送信息,iframe只能收消息,且父窗口不能直接操作iframe中的内容。3.父窗口发送的数据也是有*的。只能发送基本数据类型或者plain object。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
梦见和同性发生关糸了 梦见和同性朋友发生亲密关系 学生党如何科学护肤? 学生党该怎么基础护肤? 有什么美容护肤的技巧适合学生党? 怎么@全部成员啊? 新洲摩尔城一楼小吃租金多少 武汉王家湾有哪些广场 你好 请问 晚上6点开始 学瑜伽 可以吗? 因为我想在下班时间去 锻炼锻 ... 电脑联网有哪些条件台式电脑无线上网需要具备哪些条件 vc++如何获取磁盘信息? javascript怎么获取iframe中的地址 获取硬盘分区失败,可能缺少硬盘驱动 jQuery如何在两个窗口间互谅通信? VB6中如何获取磁盘信息? 弹出层遇到iframe怎么办 Google和百度哪个能抓取Iframe里的内容 获取硬盘分区失败,可能缺少硬盘驱动是怎么回事? iframe框架是如何传值 C语言 获取磁盘可用空间 如何在父页面上调用iframe子页面的js方法 批处理如何获取本机磁盘 用iframe嵌套一个网站,如何获取这个网站请求的数据并打印到控制台。_百... c++获取本地磁盘 layer的iframe层模式怎么实现子父通讯 获取磁盘文件系统和设备? 如何获取iframe标签中的内容 重装系统显示:“获取硬盘信息失败,请谨慎操作”是什么意思? 管理系统一般都是使用iframe吗,用它的优势和劣势在那里 一个页面上面很多iframe会有什么影响? 为什么会获取硬盘信息失败的? HttpClient怎么获取到iframe中的内容 如何用C#获取磁盘名称? Java中如何获得某个磁盘(根目录)?比如C盘 iframe框架页面中弹出窗口如何使用JS回调? jquery,iframe父窗口怎么去拿子窗口的元素 Java如何获得硬盘剩余空间? 怎么在非管理员权限下获取磁盘分区所在物理硬盘号 请教:如何获得磁盘ID VC如何得到磁盘的剩余空间 积水潭医院有几个,包括分院,我百度就回龙观院区和新街口院区,总院是那个,谢谢 VB中怎么用API获取磁盘的容量信息 从昌平做公交车,去回龙观积水潭医院做几路到达。 回龙观积水潭医院怎么样 积水潭医院骨科到底有多厉害? 北京积水潭医院怎么样? 北京昌平区回龙观积水潭医院是公立的吗,医疗水平怎么样,费用贵不贵 去北京积水潭医院坐地铁在哪里下车?(百分题) 回龙观积水潭医院属于中风险地区吗2021年11月14号属于中度疫情区1我2021? 积水潭回龙观分院 回龙观医院