重新加载嵌入在 google 个网站上的 GAS 网络应用程序

Reload a GAS's web app embedded on google sites

我在新 google 站点中嵌入了一个网络应用程序。此嵌入的应用程序必然必须重新加载网络应用程序。当 Web 应用程序的表单完成时,应用程序会打开一个带有调用此函数的按钮的模式:

function reloadPage(){
google.script.run
.withSuccessHandler(function(url){window.open(url,"_top");})
.getScriptURL();
}

这个服务器端函数:

function getScriptURL() {

var url = ScriptApp.getService().getUrl();
console.log(url)
return url ;
}

我的控制台记录了这个错误:

不安全 Javascript 尝试从 URL”URL”usserCodeAppPanel:150 来源“https://sites.google.com”的框架启动导航 usserCodeAppPanel:150 =33=]”。试图在顶层导航的框架 window 已被沙盒化,但未设置 'allow-top-navigation' 或 'allow-top-navigation-by-user-activation' 标志。

我需要重新加载,因为表单在 sheet 中注册了一个值。我的应用程序验证我将输入的值没有在 sheet 上重复。所以提交表单后,并没有体现出刚刚注册的值。例如,我输入 ID 1,验证器在 worksheet 中查找该值。如果它没有找到它,它允许您输入它,否则它会发送警报。提交表单后,字段被清除,我重新输入 ID 1,然后验证器让它通过,因为它验证 1 不在 spreadsheet 上。所以充值就不会出现这个问题。

有没有重新加载应用程序而不会出现此错误的方法? 您好!

我找到了解决方案:

  1. 首先在我的 html header 上放下一行:

<base target="self">

  1. 我将 javascript 函数更改为:

    function reloadPage(){google.script.run.withSuccessHandler(function(url){window.open(url,"_self");}).getScriptURL();}
    
  2. 在我的 doGet 函数中我放了这个:

    function doGet(e){
    var output = HtmlService.createTemplateFromFile('index');
    return  output.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME).setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL)
     }
    

通过所有这些更改,我的问题得到了解决。感谢您的评论!您好!