【问题标题】:Form redirecting in new google sites在新的谷歌网站中重定向表单
【发布时间】:2020-01-20 12:46:16
【问题描述】:

我使用应用脚本创建了一个表单。在 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>

表单运行良好,可以将日期发送到附件,并在提交后重定向到“URL”,但问题是当我尝试将表单嵌入新的谷歌网站时,它仍然将数据发送到工作表但不再重定向,它给出以下错误“script.googleusercontent.com 拒绝连接。”

PS:请注意,我只在新的谷歌网站上遇到这个问题。我尝试在经典的谷歌网站中嵌入相同的脚本,效果很好

【问题讨论】:

  • 当您收到script.googleusercontent.com refused to connect 错误时,您是否在控制台中收到错误?如果是这样,请将其粘贴在这里,我感觉这是由于same-origin policy
  • 感谢您对拉法的关注。不仅显示该错误。我在问题中添加了错误的屏幕截图。我使用像“sites.google.com/view/Sitename”这样的域,到目前为止它是由特定的人发布的
  • 您能否在再次尝试重新加载之前按F12 并单击“控制台”选项卡?如果显示任何内容,请将其粘贴到此处。
  • 我又截图了,请看问题

标签: javascript google-apps-script google-sites


【解决方案1】:

答案:

很遗憾,由于与经典网站相比,新网站的工作方式发生了变化,因此无法再在新网站中完成重定向。

更多信息:

正如您在控制台中看到的,当您尝试从 JavaScript 导航顶级窗口时会收到以下错误:

不安全的 JavaScript 尝试从 URL 为 https://&lt;id&gt;.script.googleusercontent.com/userCodeAppPanel 的框架启动对来源为 https://sites.google.com 的框架的导航。顶层窗口尝试导航的框架是沙盒的,但allow-top-navigationallow-top-navigation-by-user-activation的标志没有设置。

和:

拒绝在框架中显示&lt;URL&gt;,因为它将X-Frame-Options 设置为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 的脚本现在都将使用 @改为 987654350@。

也无法在新站点界面中设置沙盒嵌入的标志,因此也无法从站点端添加所需的导航允许标志。

你可以做什么:

只要您使用的是新网站,这里就没有什么可以做的。但是,正如您已经指出的那样,如果这是一个合适的解决方法,经典站点确实允许这样做。

参考资料:

【讨论】:

  • 是的,我尝试了很多方法,但在新网站上没有运气。我有一个想法,即在应用程序脚本中创建另一个 .html 文件,并在提交表单后将其显示在框架本身内,并且在该 html 页面内我可以添加一些链接和/或信息。请指导我如何在提交后将表单返回为 html 文件,非常感谢 Rafa 的详细解释和支持
  • 查看 google.script.run 以从 HTML 文件中运行 Apps 脚本函数,并根据您需要的条件创建一个有条件的 if 语句,该语句返回不同的 HtmlService.createHtmlOutputFromFile('html-file-name')。如果您需要更多指导 - 请随时提出新问题!
【解决方案2】:

solution

要解决此问题,您必须设置 HTML 页面的目标 如果您要动态设置页面链接,请确保使用域名。 详情请查看附图

【讨论】:

  • 这个问题已经有一个接受的答案。如果您认为接受的答案不正确,那么您应该提供足够的证据来证明这一点。此处接受的答案包括对答案的非常详细的解释,包括参考资料,并且对于任何替代答案都是一个很好的模型。
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
  • 2014-05-10
  • 2021-05-22
相关资源
最近更新 更多