Сценарий веб-приложения Google doget () не возвращает веб-страницу после рендеринга / оценки более двух раз - PullRequest
0 голосов
/ 03 марта 2020

Это ссылка моего веб-приложения: https://script.google.com/macros/s/AKfycbzmbR9ljp7d5T8vsPTKt4b_v461NDNtxh6w6s1FFuJOhSGh6EKE/exec?view=home

  1. Step1) на домашней странице -> OK

enter image description here

Шаг2) нажмите Enter-> OK

enter image description here

Шаг 3) нажмите кнопку Добавить еженедельно -> Ничего не отображается

enter image description here>

Здесь это ЖУРНАЛ:

enter image description here

Хорошо, странно, если я вручную введу параметры URL, страница будет отображаться очень хорошо:

enter image description here

Вот фрагмент кода 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);
  }

}

о кодах:

setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
  1. Если я не воспользовался этим, он не мог продлиться даже до 2) шага, сразу ничего не нажимая Enter.
  2. После добавления это сохранилось до 2-го щелчка ...

о правах доступа:

  1. опубликовано как последняя версия web Приложение
  2. опубликовано как «ME», чтобы получить максимальный доступ. хотя я исчерпал все остальные опции и ничего не работало
  3. "любой, даже анонимный пользователь может получить доступ к приложению"

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Вам необходимо установить base 's target на top frame. В противном случае вы создадите вложенную рамку l oop, потому что базовая цель по умолчанию равна _self, и вы загружаете html в iframe.

<base target="_top"> 
1 голос
/ 04 марта 2020

Я получил это работает без изменения песочницы. Смотрите демонстрацию здесь: https://script.google.com/macros/s/AKfycbzeTiyAvI3qQKodHfHFXPtSP0Sy-xU6Gwpb3SoCT8GzKLCa8i5J/exec.

Code.gs

function doGet(e)
{
  if(e.parameters.view == "two")
  {
    return HtmlService.createTemplateFromFile("two").evaluate();
  }
  else if(e.parameters.view == "three")
  {
    return HtmlService.createTemplateFromFile("three").evaluate();
  }
  else if(e.parameters.view)
  {
    return HtmlService.createTemplateFromFile("error").evaluate();
  }
  else
  {
    return HtmlService.createTemplateFromFile("one").evaluate();
  }
}

one. html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    one<br />
    <a href="<?= ScriptApp.getService().getUrl() ?>?view=two">two</a>
  </body>
</html>

два. html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    two<br />
    <a href="<?= ScriptApp.getService().getUrl() ?>?view=three">three</a>
  </body>
</html>

три. html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    three<br />
    <a href="<?= ScriptApp.getService().getUrl() ?>?view=four">four</a>
  </body>
</html>

ошибка. html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    error
  </body>
</html>
...