Скрипт приложения Google: URL-адрес в литерале шаблона приводит к ошибке «Неперехваченная ошибка синтаксиса: неожиданный конец ввода» - PullRequest
1 голос
/ 09 мая 2020

Если у меня есть эта onOpen() установка для добавления Документов Google:

function onOpen(e) {
    DocumentApp.getUi().createAddonMenu()
        .addItem('Edit Template', 'showSidebar')
        .addToUi();
}

function showSidebar() {
    const html = HtmlService
        .createHtmlOutputFromFile("dist/addOn");
    html.setTitle("DocsNData Template Editor");
    DocumentApp.getUi().showSidebar(html);
}

и если dist/addOn.html содержит это:

<html>
<head>
    <script>
        let x = `https://api.airtable.com`;
    </script>
</head>
</html>

, я получаю эту ошибку в консоль браузера, когда я пытаюсь запустить Add On:

userCodeAppPanel:3 Uncaught SyntaxError: Unexpected end of input

Если я изменяю содержимое строки так, что это не URL-адрес, он работает. Другими словами, это работает:

<html>
<head>
    <script>
        let x = `abc`;
    </script>
</head>
</html>

Так что проблема не в использовании литерала шаблона.

Кроме того, ссылка на URL-адрес как на обычную строку работает, т.е. это нормально:

<html>
<head>
    <script>
        let x = "https://api.airtable.com";
    </script>
</head>
</html>

Таким образом, URL-адреса в строках не являются проблемой, литералы шаблона не являются проблемой, их URL-адреса в шаблонных литералах, которые являются проблемой. У меня два вопроса:

  1. Почему это так и какое действие нужно исправить?
  2. Как номера строк в сообщениях об ошибках связаны с моим источником?

1 Ответ

4 голосов
/ 09 мая 2020
  • Q1: Почему это так и каковы правильные меры по исправлению?
  • Q2: Как номера строк, указанные в сообщениях об ошибках, связаны с моим источником?

Как насчет этого ответа на эти вопросы?

A1:

Я испытал такую ​​же ситуацию. В этом случае я использовал следующий обходной путь.

От:

let x = `https://api.airtable.com`;

Кому:

let x = `https:\/\/api.airtable.com`;
  • Когда let x = `https://api.airtable.com`; используется в Google Apps Сторона сценария, ошибки не возникает. Так что я думаю, что это может быть текущая спецификация или ошибка.
  • Google Issue Tracker : Хотя я искал эту проблему в Google Issue Tracker, я не смог ее найти. Я сообщил об этом в Google Issue Tracker. https://issuetracker.google.com/issues/156139610

A2:

Насчет userCodeAppPanel:3, я думаю, что сначала требуется подтвердить сообщение об ошибке. Если отображается сообщение об ошибке Uncaught SyntaxError: Unexpected end of input, это означает неполный синтаксис. При этом считается, что ошибка возникает в конце скрипта <script>...</script>. В этом случае 3 совпадает с длиной строк в <script>...</script>.

Когда отображается следующий скрипт, ошибка возникает в let x = `https://api.airtable.com`;. Но строка с ошибкой - это конец сценария <script>...</script>. При этом возвращается 3.

<html>
<head>
    <script>
        let x = `https://api.airtable.com`;
    </script>
</head>
</html>

В случае следующего примера сценария возвращается userCodeAppPanel:5 Uncaught SyntaxError: Unexpected end of input. Поскольку строка </script> находится на 5-й строке.

<html>
<head>
    <script>
        let x = `https://api.airtable.com`;


    </script>
</head>
</html>

В качестве другого примера, когда отображается следующий скрипт,

<html>
<head>
    <script>
    let x = "https://api.airtable.com";

    console.log(y);
    </script>
</head>
</html>

Возникает ошибка типа Uncaught ReferenceError: y is not defined at userCodeAppPanel:4. В этом случае линия ошибки может быть четко видна. Итак, 4 - это строка console.log(y);.

К сожалению, я не смог найти об этом в официальном документе.

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