The*_*ter 5 iframe web-applications google-apps-script
在尝试控制已window
发布的 Web 应用程序和插件侧边栏的in DOM时,我遇到了各种错误。
window.location
返回一个模糊的未知网址,n-rysutduudd.google-usercontent.com
而不是我发布的网络应用网址script.google.com/[SCRIPT_ID]/exec
尝试将我发布的 Web 应用重定向到新 url 失败
window.location.href=www.google.com
Web 应用程序中的表单,提交时重定向到空白页面。
经过研究,我认为这是由于在 iframe 中提供了网络内容。除了 webapp 在 iframe 中被沙箱化之外,文档没有显示太多内容。
我研究过的相关文档:
我研究过的一些相关问题:
我的具体问题是:我的 iframe 窗口在已发布的 Web 应用程序或侧边栏中的添加项究竟在哪里?
PUBLISHED WEB APP
+---------------------------------------------+
| script.google.com |
| |<------- [#0] window.top The top frame
| |
| +---------------------------------+ |
| | *.googleusercontent.com |<----+-------- [#1] Outer Sandboxed Iframe
| | sandboxFrame | |
| | +-----------------------+ | |
| | | /blank | | |
| | | userHtmlFrame | | |
| | | | | |
| | | Where the html |<---+-----+-------- [#2] Inner Sandboxed Iframe
| | | file you created | | |
| | | is loaded | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | +-----------------------+ | |
| | | |
| | | |
| +---------------------------------+ |
| |
| |
| |
+---------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
你是对的。大多数错误是由于谷歌完成的iframe沙箱。要回答你的问题,
您的窗口位于带有 id: 的 iframe 中userHtmlFrame
,它src
设置为/blank
.
这个框架嵌套在另一个框架中,带有src
:*.googleusercontent.com
和 id sandboxFrame
。
最后, ThesandboxFrame
嵌套在主框架内:script.google.com
window
在您发布的应用程序中是指最里面的框架。
不幸的是,这个内部框架无法在其他地方导航。
所有窗口导航都必须在最外层框架上完成:script.google.com
。这就是为什么文档要求您设置base
或锚是target
到top
框架。
但是在 IFRAME 模式下允许提交 HTML 表单,如果表单元素没有指定 action 属性,它将提交到一个空白页面。更糟糕的是,内部 iframe 将在 onclick 处理程序有机会完成之前重定向到空白页面。
该产地的iframe的userHtmlFrame
是继承自sandboxFrame
和设置*.googleusercontent.com
。对于所有意图和目的(cors、白名单来源、获取请求),这是有效的origin
.
在sandboxFrame
目前具有以下特点的政策:allow
accelerometer *; ambient-light-sensor *; autoplay *; camera *; encrypted-media *; fullscreen *; geolocation *; gyroscope *; magnetometer *; microphone *; midi *; payment *; picture-in-picture *; speaker *; usb *; vibrate *; vr *
allow-downloads allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-top-navigation
window.top
或window.parent
或window.opener
从内部框架引用外部窗口/其他窗口。但是,由于同源政策,存在多种限制。跨源访问主要受到限制。特别值得注意的是window.postMessage
,它允许帧之间的通信。 SIDEBAR/MODAL DIALOG
+---------------------------------------------+
| docs.google.com |
| +--------------------------------------+ |<------- [#0] window.top The top frame
| | /macros/.../iframedAppPanel |<--+-------- [#1] Frame1 Same origin
| | +---------------------------------+ | |
| | | *.googleusercontent.com |<|---+-------- [#2] Outer Sandboxed Iframe
| | | sandboxFrame | | |
| | | +-----------------------+ | | |
| | | | /blank | | | |
| | | | userHtmlFrame | | | |
| | | | | | | |
| | | | Where the html |<---+-|---+-------- [#3] Inner Sandboxed Iframe
| | | | file you created | | | |
| | | | is loaded | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | +-----------------------+ | | |
| | | | | |
| | | | | |
| | +---------------------------------+ | |
| | | |
| +--------------------------------------+ |
| |
+---------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
对于 Web 应用程序的上述所有说明也适用于在侧边栏或模式对话框中使用 HtmlService 发布的 Web 内容。然而,
allow-top-navigation
从沙箱属性丢失。因此,无法docs.google.com
在此处更改/导航顶部框架 ( )。 归档时间: |
|
查看次数: |
382 次 |
最近记录: |