GAS: HtmlService.getUserAgent () возвращает ноль при использовании V8 - PullRequest
0 голосов
/ 10 февраля 2020

Если вы используете следующий код GAS с движком Rhino, информация о браузере будет отображаться в журнале.

function baz() {
  var foo = HtmlService.getUserAgent();  
  Logger.log(foo);
  return 1;
}

Но если вы запускаете его с движком V8, он покажет «ноль». Как я могу это исправить или есть обходной путь? Спасибо.

Выпуск: https://issuetracker.google.com/issues/149247107

Ответы [ 3 ]

2 голосов
/ 10 февраля 2020

Согласно документации , он возвращает значение null для большинства выполнений сценариев, если не используется в функциях doGet () или doPost () веб-приложения.

Тем не менее, я выполнил вашу функцию, и она возвращает содержимое ... вы можете дать нам какие-нибудь подсказки?

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

Похоже, он еще не работает с V8 Runtime. Я не знаю, решит ли это вашу проблему, но вы можете позвонить по номеру vanilla JS и вернуть его на сервер, используя Navigator object .

Code.gs

function doGet(e) {
  var template = HtmlService.createTemplateFromFile('Index');

  // Retrieve and process any URL parameters, as necessary.
  if (e.parameter.folderId) {
    template.folderId = e.parameter.folderId;
  } else {
    template.folderId = 'root';
  }

  // Build and return HTML in IFRAME sandbox mode.
  return template.evaluate()
    .setTitle('Web App Window Title')
    .setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

function baz(userAgent) {
  //var foo = HtmlService.getUserAgent();  
  Logger.log("userAgent: " + userAgent);

  return 1;
}

JavaScript. html

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
  /**
   * Run initializations on web app load.
   */
  $(function() {
    // Call the server here to retrieve any information needed to build the page.
    var ua = loadUserAgent();
    google.script.run
       .withSuccessHandler(function(contents) {
            // Respond to success conditions here.
          })
       .withFailureHandler(function(msg) {
            // Respond to failure conditions here.
          })
       .baz(ua);
  });

  function loadUserAgent() {
    var ua = navigator.userAgent;

    return ua;
  }

</script>

appscript . json

{
  "timeZone": "Europe/Paris",
  "dependencies": {
  },
  "webapp": {
    "access": "MYSELF",
    "executeAs": "USER_DEPLOYING"
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8"
}

Проверьте это!

0 голосов
/ 29 февраля 2020

Issetracker был обновлен. https://issuetracker.google.com/issues/149247107

В итоге: - Google обновил HtmlService.getUserAgent () - СЕЙЧАС ВОЗВРАЩАЕТ ПРАВИЛЬНУЮ информацию UserAgent, если вы вызываете ее в doGet () в WebApps - ВСЕ ЕЩЕ ВОЗВРАЩАЕТСЯ NULL, если вы вызываете его в скрипте Hello World в Script Editor

. Я не знаю, это преднамеренное изменение spe c или непредвиденная ошибка, поэтому я все еще задаю вопрос.

Если (и только если) у вас есть свободное время, пожалуйста, обратитесь к моему длинному комментарию, включая видео, и наслаждайтесь! : D

0 голосов
/ 11 февраля 2020

Благодаря ответу Хуана я смог решить свою проблему.

Код в ответе не мог работать как-то, и это было довольно сложно исправить, но я понял, что используется сторона клиента JS вместо службы GAS.

На самом деле мне не нужно было запускать написанную мной функцию GAS, такую ​​как baz (), но мне просто нужно получить информацию о браузере в моей среде.

Мой младший код следующий:

Указатель. html

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
</head>
<body>
<script>
   var userAgent = navigator.userAgent;
   document.getElementById("browserInfo").innerText = userAgent;
</script>
<p id="browserInfo">BROWSERINFO</p>
</body>
</html>

Code.gs

function doGet(e) {
  var template = HtmlService.createTemplateFromFile('Index');
  return template.evaluate()
    .setTitle('Web App Window Title')
}

Я подтвердил, что если вы опубликуете sh как веб-приложения GAS, он будет работать.

Для моих целей этого достаточно.

Еще раз спасибо!

...