如果您在Rhino引擎中使用以下GAS代码,浏览器信息将显示在日志中。
function baz() {
var foo = HtmlService.getUserAgent();
Logger.log(foo);
return 1;
}
但是如果你用V8引擎运行它,它会显示"null“。我如何解决这个问题,或者有什么解决办法?谢谢。
发布于 2020-02-10 11:02:35
根据documentation,如果不在web应用程序的doGet()或doPost()函数中使用,它将在大多数脚本执行中返回null。
不过,我已经执行了你的函数,它会返回内容...你能给我们一些线索吗?
编辑:
它似乎还不适用于V8运行时。我不知道这是否能解决您的问题,但您可以通过普通的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"
}
看看这个!
发布于 2020-02-11 03:48:50
多亏了胡安的回答,我才能解决我的问题。
答案中的代码不能以某种方式工作,修复它是相当困难的,但我得到了使用客户端JS而不是GAS服务的概念。
实际上,我不需要运行像baz()这样的GAS函数,但我只需要在我的环境中获取浏览器信息。
我的初级代码如下:
Index.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')
}
我确认如果你把它发布为GAS WebApps,它就能工作。
对我来说,这就足够了。
再次感谢!
发布于 2020-02-29 06:32:09
issuetracker已更新。https://issuetracker.google.com/issues/149247107
总而言之:-谷歌更新了HtmlService.getUserAgent() -现在,如果您在WebApps中的doGet()中调用它,它将返回正确的UserAgent信息-如果您在脚本编辑器中的类似Hello World的脚本中调用它,它仍然会返回NULL
我不知道这是故意的规范改变还是意外的错误,所以我仍然在质疑。
如果(而且只有当)你有空闲时间,请参考我的长篇评论,包括视频和享受!:D
https://stackoverflow.com/questions/60146774
复制相似问题