1

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

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”。尝试导航顶级窗口的框架是沙盒的,但未设置“allow-top-navigation”或“allow-top-navigation-by-user-activation”的标志。

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

有没有办法重新加载应用程序而不会出现此错误?问候!

4

1 回答 1

3

我找到了一个解决方案:

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

<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)
     }
    

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

于 2021-01-15T02:24:29.480 回答