在新 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-navegationallow-top-navegation-by-user 标志才能从沙盒重定向。根据 hte 文档,HtmlService 中唯一可用的沙盒模式是以下 Enmerators:

  • IFRAME:一种使用iframe沙箱代替EMULATEDNATIVE模式使用的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 页面的目标 如果动态设置页面链接,请确保使用域名。 查看附件图片了解详情