首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >GAS:使用V8时,HtmlService.getUserAgent()返回null

GAS:使用V8时,HtmlService.getUserAgent()返回null
EN

Stack Overflow用户
提问于 2020-02-10 08:42:51
回答 3查看 360关注 0票数 0

如果您在Rhino引擎中使用以下GAS代码,浏览器信息将显示在日志中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function baz() {
  var foo = HtmlService.getUserAgent();  
  Logger.log(foo);
  return 1;
}

但是如果你用V8引擎运行它,它会显示"null“。我如何解决这个问题,或者有什么解决办法?谢谢。

问题:https://issuetracker.google.com/issues/149247107

EN

回答 3

Stack Overflow用户

发布于 2020-02-10 11:02:35

根据documentation,如果不在web应用程序的doGet()或doPost()函数中使用,它将在大多数脚本执行中返回null。

不过,我已经执行了你的函数,它会返回内容...你能给我们一些线索吗?

编辑:

它似乎还不适用于V8运行时。我不知道这是否能解决您的问题,但您可以通过普通的JS调用它,并使用Navigator object将其返回给服务器。

Code.gs

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "timeZone": "Europe/Paris",
  "dependencies": {
  },
  "webapp": {
    "access": "MYSELF",
    "executeAs": "USER_DEPLOYING"
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8"
}

看看这个!

票数 2
EN

Stack Overflow用户

发布于 2020-02-11 03:48:50

多亏了胡安的回答,我才能解决我的问题。

答案中的代码不能以某种方式工作,修复它是相当困难的,但我得到了使用客户端JS而不是GAS服务的概念。

实际上,我不需要运行像baz()这样的GAS函数,但我只需要在我的环境中获取浏览器信息。

我的初级代码如下:

Index.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function doGet(e) {
  var template = HtmlService.createTemplateFromFile('Index');
  return template.evaluate()
    .setTitle('Web App Window Title')
}

我确认如果你把它发布为GAS WebApps,它就能工作。

对我来说,这就足够了。

再次感谢!

票数 0
EN

Stack Overflow用户

发布于 2020-02-29 06:32:09

issuetracker已更新。https://issuetracker.google.com/issues/149247107

总而言之:-谷歌更新了HtmlService.getUserAgent() -现在,如果您在WebApps中的doGet()中调用它,它将返回正确的UserAgent信息-如果您在脚本编辑器中的类似Hello World的脚本中调用它,它仍然会返回NULL

我不知道这是故意的规范改变还是意外的错误,所以我仍然在质疑。

如果(而且只有当)你有空闲时间,请参考我的长篇评论,包括视频和享受!:D

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60146774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文