JavaScript可以读取iframe的内容吗?

JavaScript可以读取iframe的内容吗?,javascript,html,Javascript,Html,JavaScript是否可以读取嵌入在同一页面中的iframe的内容 如果是,那么是否可以绕过同一原产地政策?我知道XMLHttpRequest;它不能用于通过同一来源策略(例如HTTP GET请求)从其他站点获取数据 读取iframe的内容将有效地提供与(不受限制的)XMLHttpRequest从任意网站获取资源相同的功能?简而言之,JavaScript只能查看来自同一域的iframe。所以,不,您不能使用iframe来获得不受限制的跨域访问 较长的答案是,如果您想自己测试,请安装一个简单的w

JavaScript是否可以读取嵌入在同一页面中的iframe的内容

如果是,那么是否可以绕过同一原产地政策?我知道XMLHttpRequest;它不能用于通过同一来源策略(例如HTTP GET请求)从其他站点获取数据


读取iframe的内容将有效地提供与(不受限制的)XMLHttpRequest从任意网站获取资源相同的功能?

简而言之,JavaScript只能查看来自同一域的iframe。所以,不,您不能使用iframe来获得不受限制的跨域访问

较长的答案是,如果您想自己测试,请安装一个简单的web服务器。这将花费您<2分钟的时间

编辑/etc/hosts文件或C:\Windows\System32\Drivers\etc\hosts文件并添加

127.0.0.1  first.com
127.0.0.1  second.com
创建一个包含index.html和iframe.html的文件夹。在index.html中加入一些JavaScript,尝试查看iframe.html,并将iframe.html作为iframe包含在内

<!-- index.html -->
<iframe src="http://second.com:8080/iframe.html></iframe>
<script>
   const iframe = document.querySelector('iframe');
   console.log(iframe.contentDocument.body.innerText);
</script>

<!-- iframe.html -->
<div>Hello world</div>
这是有效的,因为它们都在同一个域上

现在将浏览器中的URL更改为
http://first.com:8080/index.html

这一次你会看到类似的东西

VM41:66 Uncaught DOMException: Failed to read the 'contentDocument' 
 property from 'HTMLIFrameElement': Blocked a frame with origin 
"http://first.com:8080" from accessing a cross-origin frame.
at HTMLIFrameElement.contentDocumentDesc.get [as contentDocument] 

注意:根据您使用的服务器,您需要更改上面的
8080
,以匹配您的服务器使用的端口。

简而言之,JavaScript只能查看来自同一域的iframe。所以,不,您不能使用iframe来获得不受限制的跨域访问

较长的答案是,如果您想自己测试,请安装一个简单的web服务器。这将花费您<2分钟的时间

编辑/etc/hosts文件或C:\Windows\System32\Drivers\etc\hosts文件并添加

127.0.0.1  first.com
127.0.0.1  second.com
创建一个包含index.html和iframe.html的文件夹。在index.html中加入一些JavaScript,尝试查看iframe.html,并将iframe.html作为iframe包含在内

<!-- index.html -->
<iframe src="http://second.com:8080/iframe.html></iframe>
<script>
   const iframe = document.querySelector('iframe');
   console.log(iframe.contentDocument.body.innerText);
</script>

<!-- iframe.html -->
<div>Hello world</div>
这是有效的,因为它们都在同一个域上

现在将浏览器中的URL更改为
http://first.com:8080/index.html

这一次你会看到类似的东西

VM41:66 Uncaught DOMException: Failed to read the 'contentDocument' 
 property from 'HTMLIFrameElement': Blocked a frame with origin 
"http://first.com:8080" from accessing a cross-origin frame.
at HTMLIFrameElement.contentDocumentDesc.get [as contentDocument] 

注意:根据您使用的服务器的不同,您需要更改上面的
8080
,以匹配您的服务器使用的端口。

您尝试过吗?我不知道该怎么做。取决于同一来源策略以及是否设置了
X-Frame-Options
标题。您尝试过吗?我不知道该怎么做。取决于同一来源策略和是否设置了
X-Frame-Options
标题。谢谢-您能提供一段代码读入iframe吗?@Shuzheng当您尝试执行的操作不可能时,一段代码会有什么好处?这段代码不起作用。谢谢你-你能提供一段可以读入iframe的代码吗?@Shuzheng如果你想做的事情不可能,那么这段代码有什么好处?这个片段不起作用。