基本上我有一个跨域iframe,并且无法启用allow-scripts标志,但与此同时,我需要获取iframe文档中<script>
标记中的postMessage或访问iframe contentDocument。
我尝试过:
let iframeElement = document.getElementsByTagName('iframe')[0];
let iframeContent = iframeElement.contentDocument
console.log(iframeContent)
但是使用沙盒标志,我只会得到null
的回报。
我需要做的是以下三个选项之一:
但是所有这一切都没有allow-scripts标志,这是我想要归档的吗?
答案 0 :(得分:0)
要引用部分问题,
我需要获取iframe文档中
<script>
标签中的postMessage
如果您表示需要 put 或 inject 一个包含postMessaging的<script>
标签,那么恐怕是不可能的,因为{{ 3}}会阻止它。
但是,如果您要尝试获得访问或收听从交叉链接中的<script>
标签广播的same-origin policy原先的iframe,然后是,这正是postMessage旨在实现的目标。前提是您的消息事件侦听器托管在postMessage的targetOrigin
参数中定义的来源上。
PostMessage本质上是一种信任契约,可以克服跨域障碍。通过拥有...
targetOrigin
(推荐)上,或者被放置在任何来源(如果{{ 1}}具有通配符“ *”值(不推荐)答案 1 :(得分:0)
简单的答案是否。
具有其sandbox
属性的
现在,由于您的文档不满足跨域策略,您将陷入困境,无法从外部与
如果必须使用此功能,唯一的解决方法是将服务器用作代理,以便由您自己的服务器实际获取iframe的内容并为其提供服务。
通过这种方式,不再存在跨域问题(如果您在iframe上添加了allow-same-origin
策略),就可以从父级文档访问iframe的内容,甚至可以添加事件监听器,甚至尽管仍然无法从