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