渲染/评估两次以上后,Google Web应用程序脚本doget()不会返回任何网页 [英] Google web app script doget() do not return any webpage after rendering/evaluating more than twice

查看:44
本文介绍了渲染/评估两次以上后,Google Web应用程序脚本doget()不会返回任何网页的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的Web应用程序的链接:

  1. Step2)单击Enter->确定

  1. Step3)点击每周添加-> 不显示任何内容

>

以下是日志:

好吧,奇怪的是,如果我手动输入url参数,页面就会呈现得很好:

这是doget()的代码段:

  function doGet(e){Logger.log(e);Logger.log("view =" + e.parameters.view);if(e.parameters.view =="weekly"){Logger.log("view == weekly");var page = addWeeklyReport();//Logger.log(page.getTitle());//返回page.evaluate();返回page.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME).setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);}否则if(e.parameters.view =="home"){Logger.log("view is home");var home = HtmlService.createTemplateFromFile("homehs");返回home.evaluate();//返回addWeeklyReport();}否则if(e.parameters.view =="projects"){Logger.log(这里的视图是项目");返回HtmlService.createTemplateFromFile("project-list").evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME).setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);}其他if(e.parameters.view =="addproject"){返回HtmlService.createTemplateFromFile("add-project").evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME).setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);}别的{//返回HtmlService.createTemplateFromFile("demo").evaluate();返回HtmlService.createTemplate(< h2>演示</h2>").evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME).setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);}} 

关于代码:

  setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); 

  1. 如果我不使用它,它甚至不能持续到2)步,单击Enter后立即消失.
  2. 添加后,它一直存在,直到第二次单击为止.

关于访问权限:

  1. 它已发布为最新版本的网络应用程序
  2. 发布为"ME"以获取最多的访问权限.尽管我已经用尽了所有其他选择,但似乎没有任何作用
  3. 甚至任何人都可以访问应用程序"

解决方案

您需要设置 base 的目标 top 框架.否则,您将创建一个嵌套框架循环,因为基本目标默认为 _self ,并且您将html加载到iframe中.

 <基本目标="_ top"> 

This is the link of my web app: https://script.google.com/macros/s/AKfycbzmbR9ljp7d5T8vsPTKt4b_v461NDNtxh6w6s1FFuJOhSGh6EKE/exec?view=home

  1. Step1) at home page -> OK

  1. Step2) click enter-> OK

  1. Step3) click add weekly -> Renders nothing

>

Here is the LOG:

Well, weirdly, if I manually input the url paremeters, the page is rendered just fine:

here is the code snippet of doget():

function doGet(e){
  Logger.log(e);
  Logger.log("view="+e.parameters.view);

  if(e.parameters.view =="weekly"){
    Logger.log("view==weekly");

    var page = addWeeklyReport();

    //Logger.log(page.getTitle());
    //return page.evaluate();

    return page.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
  }else if(e.parameters.view == "home"){
    Logger.log("view is home");
    var home = HtmlService.createTemplateFromFile("homehs");
    return home.evaluate();
  //return addWeeklyReport();
  }else if(e.parameters.view == "projects"){
    Logger.log("here view is projects");
    return HtmlService.createTemplateFromFile("project-list").evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
  }else if(e.parameters.view=="addproject"){
    return HtmlService.createTemplateFromFile("add-project").evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
  }else{
    //return HtmlService.createTemplateFromFile("demo").evaluate();
    return HtmlService.createTemplate("<h2>demo</h2>").evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
  }

}

about the codes:

setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);

  1. If i didn't use this, it couldnt even last until 2)step, straight away nothing after clicking Enter.
  2. After adding this, it survived until the 2nd click ...

about the Access rights:

  1. it is published as latest version web app
  2. published as "ME" in order to gain the most access . although i have exhausted all other options and nothing seemed to work
  3. "anyone even anonymous can access app"

解决方案

You need to set base's target to the top frame. Otherwise you'll be creating a nesting frame loop because base target defaults to _self and you are loading the html in a iframe.

<base target="_top"> 

这篇关于渲染/评估两次以上后,Google Web应用程序脚本doget()不会返回任何网页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆