google.script.run в html пользовательский интерфейс не вызывает функцию сервера - PullRequest
1 голос
/ 30 апреля 2020

У меня есть пара скриптов, которые больше не работают, хотя я не внес никаких изменений. Я не трачу много времени на программирование этих последних месяцев, поэтому я не сразу заметил это ... Вот упрощенный код, который раньше работал, а этого нет, я не могу понять свою ошибку. Часть HTML полностью построена на стороне сервера, так как это очень простой код (запускается из электронной таблицы).

function myFunction() {
  var doc = '<body style="font-family:arial,sans;font-size:12pt">';
  doc+='<select id="target" multiple style="font-family:arial,sans;font-size:12pt">';
  doc+='<option value="1">choice 1</option><option value="2">choice 2</option><option value="3">choice 3</option></select><br><br>';
  doc+='<input type="button" onClick="processJS()" style="background:#BFA;font-size:12pt" value="Validate"/>';
  doc+='<script>function processJS(){var e=document.getElementById("target");var values=Array.from(e.selectedOptions).map(option => option.value);';
  doc+='console.log(JSON.stringify(values));google.script.run.withSuccessHandler(function(msg){ window.alert(msg);google.script.host.close;}).processGSTest(values)};</script>';
  doc+='</body>';

  var ui = HtmlService.createHtmlOutput(doc).setWidth(500).setHeight(250);
  SpreadsheetApp.getUi().showModelessDialog(ui, "test");
}

function processGSTest(values){
  Logger.log(JSON.stringify(values));
  return "processGSTest ok";
}

Я получаю сообщение об ошибке в консоли JS, например, когда я нажимаю «проверить» :

enter image description here

окно визуализации HTML выглядит следующим образом:

enter image description here


РЕДАКТИРОВАТЬ

После комментариев (еще раз спасибо) У меня есть еще несколько сведений:

  • при использовании другого браузера сценарии работают нормально
  • при использовании chrome и добавлении withFailureHandler все равно происходит сбой с тем же консольным сообщением без обработки ошибки (Chrome Версия 81.0.4044.122 (Build officiel) (64 бита) в Ma c OS High Sierra)
  • при вызове той же функции из пользовательского меню скрипт работает нормально даже в том же Chrome сеансе

вывод этого редактирования: я не понимаю вопроса:)

1 Ответ

1 голос
/ 01 мая 2020

Поскольку в этом посте речь идет об очень конкретном случае c, который не кажется воспроизводимым, я отвечаю на него, чтобы он не оставался открытым бесконечно долго. В то же время я опубликую отчет о проблеме на трекере.

Вот скрипт, который я использую, чтобы показать проблему. Основная функция (myFunction) сообщает об ошибке при вызове из редактора сценариев, но работает при вызове из меню ...

Это происходит только в Chrome Версия 81.0.4044.122 (Build officiel) (64 бита) на Ma c ОС High Sierra 10.13.6 работает нормально в Safari, Firefox и даже Chrome на Windows 10. (также нормально работает на той же версии Chrome под Ma c ОС 10.10.5 !!)

function myFunction() {
  var doc = '<body style="font-family:arial,sans;font-size:12pt">';
  doc+='<select id="target" multiple style="font-family:arial,sans;font-size:12pt">';
  doc+='<option value="1">choice 1</option><option value="2">choice 2</option><option value="3">choice 3</option></select><br><br>';
  doc+='<input type="button" onClick="processJS()" style="background:#BFA;font-size:12pt" value="Validate"/>';
  doc+='<script>function processJS(){var e=document.getElementById("target");var values=Array.from(e.selectedOptions).map(option => option.value);';
  doc+='console.log(JSON.stringify(values));google.script.run.withFailureHandler(function err(){window.alert("error triggered by withFailureHandler");})';
  doc+='.withSuccessHandler(function(msg){ window.alert(msg);google.script.host.close();}).processGSTest(values)};</script>';
  doc+='</body>';

  var ui = HtmlService.createHtmlOutput(doc).setWidth(500).setHeight(250);
  SpreadsheetApp.getUi().showModelessDialog(ui, "test");
}

function processGSTest(values){
  Logger.log(JSON.stringify(values));
  return "processGSTest ok";
}

function onOpen(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [{name: "test", functionName: "myFunction"}]
  ss.addMenu("test",menuEntries);
}

Я создал общую таблицу для всех, кто захочет поиграть с ней (только для чтения, сделайте копию на использование)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...