#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-файла