是否可以在没有 "allow-scripts" 标志的情况下将 postMessage 发送到沙盒 iframe?
Is it possible to send a postMessage to a sandboxed iframe WITHOUT the "allow-scripts" flag?
基本上我有一个跨域的 iframe 并且无法启用允许脚本标志,但同时我需要在 iframe 文档中获取 <script>
标记中的 postMessage 或访问iframe 内容文档。
我试过:
let iframeElement = document.getElementsByTagName('iframe')[0];
let iframeContent = iframeElement.contentDocument
console.log(iframeContent)
但是使用沙箱标志我只得到 null
return.
我需要做的是以下三个选项之一:
- 将 eventListener 添加到 iframe contentDocument 中的标记
- 获取也在 iframe contentDocument 中的 attr 值
- 一种从原始页面发送 JSON 并在带有 iframe (postMessage) 的页面中获取此 JSON 的方法
但是所有这些都没有允许脚本标志,这就是我想要实现的目标吗?
引用你的部分问题,
I need to get the postMessage that is in a <script>
tag in the iframe document
如果您的意思是您需要 put 或 inject 包含 postMessaging 的 <script>
标签,那么我恐怕这是不可能的,因为 same-origin policy 会阻止它。
但是,如果您正在尝试获取访问或收听来自[=的postMessage广播10=] 跨源 iframe 中的标记,然后是的,这正是 postMessage 旨在实现的目的。前提是您的消息事件侦听器托管在 postMessage 的 targetOrigin
参数中定义的源上。
PostMessage本质上是一种信任契约,用来克服跨域障碍;通过...
- 访问和许可创作 iframe 的内容
- 被委托 收听 通过托管在
targetOrigin
定义的(推荐)或由如果 targetOrigin
具有通配符“*”值(不推荐) ,则在任何来源
https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage#Security_concerns
简单的答案是否。
具有限制脚本使用的 sandbox
属性的
现在,由于您的文档不满足 cross-origin 政策,您陷入困境,无法从外部与
唯一的解决方法(如果此功能是必须具备的)是使用您的服务器作为代理,以便您的 iframe 的内容由您自己的服务器实际获取和提供。
这样,就不再有 cross-origin 问题(如果您在 iframe 上添加 allow-same-origin
政策),您将能够从 parent 访问 iframe 的内容' s 文档,甚至添加事件侦听器,即使仍然没有脚本可以从此
基本上我有一个跨域的 iframe 并且无法启用允许脚本标志,但同时我需要在 iframe 文档中获取 <script>
标记中的 postMessage 或访问iframe 内容文档。
我试过:
let iframeElement = document.getElementsByTagName('iframe')[0];
let iframeContent = iframeElement.contentDocument
console.log(iframeContent)
但是使用沙箱标志我只得到 null
return.
我需要做的是以下三个选项之一:
- 将 eventListener 添加到 iframe contentDocument 中的标记
- 获取也在 iframe contentDocument 中的 attr 值
- 一种从原始页面发送 JSON 并在带有 iframe (postMessage) 的页面中获取此 JSON 的方法
但是所有这些都没有允许脚本标志,这就是我想要实现的目标吗?
引用你的部分问题,
I need to get the postMessage that is in a
<script>
tag in the iframe document
如果您的意思是您需要 put 或 inject 包含 postMessaging 的 <script>
标签,那么我恐怕这是不可能的,因为 same-origin policy 会阻止它。
但是,如果您正在尝试获取访问或收听来自[=的postMessage广播10=] 跨源 iframe 中的标记,然后是的,这正是 postMessage 旨在实现的目的。前提是您的消息事件侦听器托管在 postMessage 的 targetOrigin
参数中定义的源上。
PostMessage本质上是一种信任契约,用来克服跨域障碍;通过...
- 访问和许可创作 iframe 的内容
- 被委托 收听 通过托管在
targetOrigin
定义的(推荐)或由如果targetOrigin
具有通配符“*”值(不推荐) ,则在任何来源
https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage#Security_concerns
简单的答案是否。
具有限制脚本使用的 sandbox
属性的
现在,由于您的文档不满足 cross-origin 政策,您陷入困境,无法从外部与
唯一的解决方法(如果此功能是必须具备的)是使用您的服务器作为代理,以便您的 iframe 的内容由您自己的服务器实际获取和提供。
这样,就不再有 cross-origin 问题(如果您在 iframe 上添加 allow-same-origin
政策),您将能够从 parent 访问 iframe 的内容' s 文档,甚至添加事件侦听器,即使仍然没有脚本可以从此