Таблицы google.script.run всегда приводят к сбою обработчика

#google-apps-script #google-sheets

#google-apps-script #google-таблицы

Вопрос:

Я использую GoogleSheets HtmlService. Я вызываю google.script.run из скрипта моей Html-страницы. Но это всегда будет FailureHandler. Что в этом плохого? Пожалуйста, посмотрите код ниже. Когда я запускаю его, он всегда показывает сбой предупреждения. Кроме того, регистратор не показывает никаких ошибок. Он также не показывает журнал консоли «Внутри Hello» в функции hello (). Нужно ли нам также выполнить некоторые настройки браузера (я использую chrome — разрешен javascript).

[ОБНОВЛЕНО] После замены Logger.log на console.log я вижу это как ошибку переноса.

 modeDialog.gs

function openDialog() {
  var html = HtmlService.createHtmlOutputFromFile("test");
  html.setWidth(90).setHeight(1);
  var ui = SpreadsheetApp.getUi().showModalDialog(html, "Opening ..." );
}

function hello() {
  console.log("Inside Hello");
  return "hello";
}


test.html

<!DOCTYPE html>

<html>  
  <head>
  <base target="_top">
  <script>
  function onSuccess(str) {
  window.alert("executed");
  }
  
  function onFailure(error) {
  window.alert("failed");
  Logger.log(error);
  }
  
  google.script.run.withSuccessHandler(onSuccess).withFailureHandler(onFailure).hello();
  
  </script>
  </head>
  <body>
    <div id="failureContent"></div>
    Hello world
  </body>  
</html>


 

Комментарии:

1. Logger недоступен на стороне клиента. Используйте console вместо этого. Посмотрите в инструментах разработчика> Консоль браузера журналы ошибок

2. В вашем случае я подумал, что Failed to load resource: the server responded with a status of 500 может возникнуть ошибка, подобная google.script.run . В моей среде я также подтвердил такую ситуацию с помощью google.script.run . В этом случае, когда я создаю новую электронную таблицу, копирую и вставляю скрипт в редактор сценариев и запускаю снова, проблема была устранена. Итак, в вашей среде, когда вы это сделаете, какой результат вы получите? На текущем этапе я не могу найти эту проблему в системе отслеживания проблем. Так что я не уверен, является ли это прямым решением вашей проблемы. Я прошу прощения за это.

3. попробуйте поместить его в window.onload

4. @shanti я не уверен, имеет ли значение ошибка транспорта. Что заставляет вас думать hello , что он не запускался? Вы проверяли журналы сервера? Просмотр> выполнение?

5. Хорошо, итак, я попробовал FireFox, и он переходит к обработчику успеха и показывает предупреждение «Выполнено». Что-то не так с Chrome…

Ответ №1:

Как я уже упоминал, что он работал ранее в Chrome и в настоящее время работает в FireFox, я снова протестировал его после изменения настроек Chrome на значения по умолчанию, перейдя в Chrome> Настройки> Дополнительно> Сброс и очистка> Восстановить настройки до их исходных значений по умолчанию.

После этого он работает нормально. Поэтому установите это в качестве ответа.

Ответ №2:

Я запустил его таким образом:

GS:

 function openDialog() {
  SpreadsheetApp.getUi().showModalDialog(HtmlService.createHtmlOutputFromFile("ah3"), "Opening ..." );
}

function hello() {
  return "hello";
}
 

HTML:

 <!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    Hello world
    <script>
    window.onload=function(){
      google.script.run
      .withSuccessHandler(function(str){window.alert("executed");})
      .withFailureHandler(function(error){window.alert("failed");})
      .hello();
    }  
    console.log('MyCode');
    </script>
  </body>
</html>
 

Мне просто нравится использовать функцию onReadyState или onload для запуска большинства javascript, чтобы html уже был загружен. Не то, чтобы это имело большое значение в этом тривиальном примере. Также я склонен помещать скрипты в тело, а не в голову.

Комментарии:

1. Я скопировал ваш ответ и запустил его, он по-прежнему выдает сбой: (и в консоли разработчика снова ошибка переноса и 2451951077-waffle_js_prod_core.js:471 ПОЛУЧИТЬ chrome-extension:// invalid/ net::ERR_FAILED

2. Я постоянно получаю подобные транспортные ошибки. Честно говоря, я не знаю, в чем проблема, и, в конце концов, мне все равно, пока мои скрипты выполняются, и они это делают, поэтому я перестал беспокоиться о них.

3. хорошо, но он даже не выполняет мою функцию hello()…

4. Очевидно, я не могу это подтвердить

5. вы изменили ‘ah3’ обратно на ‘test’. ‘ah3’ — это имя моего html-файла