在新 google 个站点中重定向表单
Form redirecting in new google sites
我使用应用程序脚本创建了一个表单。在 html 文件中,我有以下内容;
<form name="Subscribe-to-Central" id="Subscribe-to-Central" action="https://script.google.com/macros/s/key/exec" method="POST" onsubmit="myFunction()">
Inputs ..
</form>
<script>
function myFunction() {
alert("Successfully subscribed. Please press okay to return to the home page");
window.open("URL", "_top");
}
</script>
表单在将日期发送到附件 sheet 并在提交后重定向到“URL”方面运行良好,但问题是当我尝试将表单嵌入到新的 google 站点,它仍将数据发送到 sheet 但不再重定向,并给出以下错误“script.googleusercontent.com 拒绝连接。”
PS:请注意,我只在新的 google 网站上遇到过这个问题。我尝试在经典 google 站点中嵌入相同的脚本并且效果很好
答案:
遗憾的是,由于新站点与经典站点相比工作方式发生了变化,因此无法再在新站点中完成重定向。
更多信息:
如您在控制台中所见,尝试从 JavaScript 导航到顶级 window 时出现以下错误:
Unsafe JavaScript attempt to initiate navigation for frame with origin https://sites.google.com
from frame with URL https://<id>.script.googleusercontent.com/userCodeAppPanel
. The frame attempting navigation of the top-level window is sandboxed, but the flag of allow-top-navigation
or allow-top-navigation-by-user-activation
is not set.
和:
Refused to display <URL>
in a frame because it set X-Frame-Options
to sameorigin
.
可以使用 HtmlService
的 .setXFrameOptionsMode()
方法并使用 XFrameOptionsMode
枚举器为嵌入式 Google Apps 脚本页面设置 X-Frame-Options
如下所示:
function doGet(e) {
return HtmlService.createHtmlOutputFromFile('index')
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
不幸的是,沙盒需要 allow-top-navegation
或 allow-top-navegation-by-user
标志才能从沙盒重定向。根据 hte 文档,HtmlService
中唯一可用的沙盒模式是以下 Enmerators:
IFRAME
:一种使用iframe沙箱代替EMULATED
和NATIVE
模式使用的Caja沙箱技术的沙箱模式。此模式是自 2015 年 11 月 12 日起的新脚本和自 2016 年 7 月 6 日起的所有脚本的默认模式。
NATIVE
:建立在 ECMAScript 5 严格模式之上的沙盒模式。建立在 ECMAScript 5 严格模式之上的沙盒模式。此模式已于 2016 年 7 月 6 日停用。所有脚本现在都使用 IFRAME 模式。
EMULATED
:一种仅使用 ECMAScript 3 中可用功能模拟 ECMAScript 5 严格模式的遗留沙箱模式。此模式是 2014 年 2 月之前的默认模式。实际上已弃用,所有脚本尝试使用 EMULATED
现在将改为使用 IFRAME
。
沙盒嵌入的标志设置也无法从新站点界面中完成,因此添加所需的导航允许标志也无法从站点端完成。
你能做什么:
只要您使用的是新站点,这里就没有什么可以做的。然而,正如您已经指出的那样,如果这是一个合适的解决方法,经典站点确实允许这样做。
参考文献:
solution
要解决此问题,您必须设置 HTML 页面的目标
如果动态设置页面链接,请确保使用域名。
查看附件图片了解详情
我使用应用程序脚本创建了一个表单。在 html 文件中,我有以下内容;
<form name="Subscribe-to-Central" id="Subscribe-to-Central" action="https://script.google.com/macros/s/key/exec" method="POST" onsubmit="myFunction()">
Inputs ..
</form>
<script>
function myFunction() {
alert("Successfully subscribed. Please press okay to return to the home page");
window.open("URL", "_top");
}
</script>
表单在将日期发送到附件 sheet 并在提交后重定向到“URL”方面运行良好,但问题是当我尝试将表单嵌入到新的 google 站点,它仍将数据发送到 sheet 但不再重定向,并给出以下错误“script.googleusercontent.com 拒绝连接。”
PS:请注意,我只在新的 google 网站上遇到过这个问题。我尝试在经典 google 站点中嵌入相同的脚本并且效果很好
答案:
遗憾的是,由于新站点与经典站点相比工作方式发生了变化,因此无法再在新站点中完成重定向。
更多信息:
如您在控制台中所见,尝试从 JavaScript 导航到顶级 window 时出现以下错误:
Unsafe JavaScript attempt to initiate navigation for frame with origin
https://sites.google.com
from frame with URLhttps://<id>.script.googleusercontent.com/userCodeAppPanel
. The frame attempting navigation of the top-level window is sandboxed, but the flag ofallow-top-navigation
orallow-top-navigation-by-user-activation
is not set.
和:
Refused to display
<URL>
in a frame because it setX-Frame-Options
tosameorigin
.
可以使用 HtmlService
的 .setXFrameOptionsMode()
方法并使用 XFrameOptionsMode
枚举器为嵌入式 Google Apps 脚本页面设置 X-Frame-Options
如下所示:
function doGet(e) {
return HtmlService.createHtmlOutputFromFile('index')
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
不幸的是,沙盒需要 allow-top-navegation
或 allow-top-navegation-by-user
标志才能从沙盒重定向。根据 hte 文档,HtmlService
中唯一可用的沙盒模式是以下 Enmerators:
IFRAME
:一种使用iframe沙箱代替EMULATED
和NATIVE
模式使用的Caja沙箱技术的沙箱模式。此模式是自 2015 年 11 月 12 日起的新脚本和自 2016 年 7 月 6 日起的所有脚本的默认模式。NATIVE
:建立在 ECMAScript 5 严格模式之上的沙盒模式。建立在 ECMAScript 5 严格模式之上的沙盒模式。此模式已于 2016 年 7 月 6 日停用。所有脚本现在都使用 IFRAME 模式。EMULATED
:一种仅使用 ECMAScript 3 中可用功能模拟 ECMAScript 5 严格模式的遗留沙箱模式。此模式是 2014 年 2 月之前的默认模式。实际上已弃用,所有脚本尝试使用EMULATED
现在将改为使用IFRAME
。
沙盒嵌入的标志设置也无法从新站点界面中完成,因此添加所需的导航允许标志也无法从站点端完成。
你能做什么:
只要您使用的是新站点,这里就没有什么可以做的。然而,正如您已经指出的那样,如果这是一个合适的解决方法,经典站点确实允许这样做。
参考文献:
solution
要解决此问题,您必须设置 HTML 页面的目标 如果动态设置页面链接,请确保使用域名。 查看附件图片了解详情