Uncaught TypeError: google.script.run.doSomething не является функцией - PullRequest
1 голос
/ 26 мая 2019

Я пытаюсь проверить, есть ли введенное имя в Google Sheet. Однако я получаю эту ошибку:

Uncaught TypeError: google.script.run.doSomething не является функцией.

Вот мой Index.html файл.

<!DOCTYPE html>
<html>

<head>
    <base target="_top">
    <meta charset="UTF-8">
</head>

<body>
    <input type="text" id="meetingTitle" value=""> // Getting value here
    <button onclick="checkName()">Check if available</button> //Calling function is is causing the error.
    <p id=nameVerification><i>Click the button above to check availability.</i></p>

    <script>
        function checkName() {
            var toPass = document.getElementById("meetingTitle").value;
            prompt("toPass " + toPass);
            google.script.run.doSomething();
        }

        function checkNameCS(checkNameSSReturn) {
            if (checkNameSSReturn == "") {
                document.getElementById('nameVerification').innerHTML = "Already in Use: Please try with another name."
                document.getElementById("meetingTitle").value = "";
            } else {
                document.getElementById("meetingTitle").value = checkNameSSReturn;
                document.getElementById('nameVerification').innerHTML = "Meeting name available. Procced."
            }


        }

        function doSomething () {
            var nameGiven = document.getElementById("meetingTitle").value;
            var nameExists = false;
            var nameVerified = false;
            var name = nameGiven.toLowerCase();
            name = strip(name);
            prompt("name " + name);


            var spreadsheetId = ''; //Sheet id entered
            var rangeName = 'Sheet1';
            var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName).values;
            if (!values) {} else {
                for (var row = 0; row < values.length; row++) {
                    if (name == values[row][0]) {
                        nameExists = true;
                    }
                }
            }

            if (nameExists) {
                checkNameCS("");
                prompt("name2 " + " ");
                return;
            }

            nameVerified = true;
            prompt("name2 " + name);
            checkNameCS(name);
            return;
        }

        function strip(str) {
             return str.replace(/^\s+|\s+$/g, '');
        }

    </script>
</body>

</html>

Я пытался отладить его с помощью подсказок, но безуспешно. Кажется, что функция сделать что-то правильно вызывается. Но код перестает работать после google.script.run.doSomething();.

Я посмотрел документацию для преемников, но они также не решают проблему.

1 Ответ

0 голосов
/ 26 мая 2019

Как насчет этой модификации?

Выпуск вашего скрипта:

  • doSomething() из google.script.run.doSomething() должен быть скриптом Google Apps.
    • В вашем скрипте doSomething() вставлено в HTML (index.html), и включен метод использования Google Apps Script. Когда выполняется google.script.run.doSomething(), doSomething() не может быть найдено в скрипте Служб Google (code.gs). При этом возникает такая ошибка. И если doSomething() выполняется на стороне HTML, также возникает ошибка на Sheets.Spreadsheets.Values.get(), потому что Sheets.Spreadsheets.Values.get() - это метод расширенных служб Google с помощью скрипта Google Apps.
  • Если вы включите его в скрипт Google Apps (code.gs), Javascript, который используется в сценарии doSomething(), необходимо изменить.

Модифицированный скрипт:

В этой модификации ваш скрипт был разделен на Google Apps Script (code.gs) и HTML (index.html). var nameGiven = document.getElementById("meetingTitle").value; и checkNameCS(name); используются в index.html.

Кстати, прежде чем запускать этот скрипт, пожалуйста, включите Sheets API в Advanced Google Services.

Сценарий Google Apps: code.gs
function strip(str) {
  return str.replace(/^\s+|\s+$/g, '');
}

function doSomething (nameGiven) {
  var nameExists = false;
  var nameVerified = false;
  var name = nameGiven.toLowerCase();
  name = strip(name);

  var spreadsheetId = '###'; //Sheet id entered
  var rangeName = 'Sheet1';
  var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName).values;
  if (values) {
      for (var row = 0; row < values.length; row++) {
          if (name == values[row][0]) {
              nameExists = true;
          }
      }
  }

  if (nameExists) {
      return "";
  }

  nameVerified = true;
  return name;
}
HTML: index.html
<!DOCTYPE html>
<html>

<head>
    <base target="_top">
    <meta charset="UTF-8">
</head>

<body>
    <input type="text" id="meetingTitle" value="">
    <button onclick="checkName()">Check if available</button>
    <p id=nameVerification><i>Click the button above to check availability.</i></p>

    <script>
        function checkName() {
            var toPass = document.getElementById("meetingTitle").value;
            prompt("toPass " + toPass);
            var nameGiven = document.getElementById("meetingTitle").value; // Added
            google.script.run.withSuccessHandler(checkNameCS).doSomething(nameGiven); // Modified
        }

        function checkNameCS(checkNameSSReturn) {
          console.log(checkNameSSReturn)
            if (checkNameSSReturn == "") {
                document.getElementById('nameVerification').innerHTML = "Already in Use: Please try with another name."
                document.getElementById("meetingTitle").value = "";
            } else {
                document.getElementById("meetingTitle").value = checkNameSSReturn;
                document.getElementById('nameVerification').innerHTML = "Meeting name available. Procced."
            }
        }
    </script>
</body>

</html>

Справка:

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