我创建了以下两个文件:
code.gs
function doGet() {
var html = HtmlService.createHtmlOutputFromFile('html.html');
return html;
}
中将Html.HTML
<html>
<body>
<p id="messaging">Click the button to get your coordinates:</p>
<button onclick="getLocation()">Where am I</button>
<script>
var message=document.getElementById("messaging");
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
message.innerHTML="Geolocation is not supported.";
}
}
function showPosition(position) {
message.innerHTML="Latitude: " + position.coords.latitude + "<br>Longitude: " + position.coords.longitude;
}
</script>
</body>
</html>
当我调用已发布的URL时,我会收到预期的消息和按钮。单击按钮,我收到失败消息“不支持地理位置”。如果我将html.html保存在文件中并在浏览器中打开它,它会按预期工作。
有什么想法吗?
答案 0 :(得分:2)
截至2016年,地理位置在IFRAME模式下与HtmlService一起使用。在此测试:GAS-geolocation
使用Chrome和Firefox(桌面版)测试,都可以。不适用于Safari(桌面)(共享位置确认框不会弹出。我讨厌Safari!)
有趣的是,它适用于iOS 9上的Safari,但不适用于iOS 9上的最新Chrome。(同样的问题,没有确认弹出窗口)
答案 1 :(得分:1)
我相信,Caja是罪魁祸首。您可以在Caja playground上运行代码以检查行为是否相同。如果相同,您可以在Caja Issue Tracker
中打开一个问题要了解Caja对HtmlService的更多了解,您可以参考此page。
<强>更新强> 以上答案已经过时。现在可以使用浏览器中提供的navigator.geolocation对象访问位置。
答案 2 :(得分:1)
HtmlService中尚未提供GeoLocation
答案 3 :(得分:0)
我刚尝试过您的代码,因为我想在Google协作平台中使用Google Apps脚本。
目前,HTMLService似乎仍然不支持GeoLocation,但我找到了一个可能的解决方法,以满足我的特定需求(即与Google协作平台一起使用),这也可以帮助其他人:
有效的方法是创建自定义的“Google协作平台小工具”
中的示例代码我最终为我的小工具提供了一个'骨架'XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs title="GeoLocation"
>
</ModulePrefs>
<Content type="html"><![CDATA[
<form>
<input type="button" onclick="getLocation();"
value="Get Location"/>
</form>
<script>
function showLocation(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
alert("Latitude : " + latitude + " Longitude: " + longitude);
}
function errorHandler(err) {
if(err.code == 1) {
alert("Error: Access is denied!");
}else if( err.code == 2) {
alert("Error: Position is unavailable!");
}
}
function getLocation(){
if(navigator.geolocation){
// timeout at 60000 milliseconds (60 seconds)
var options = {timeout:60000};
navigator.geolocation.getCurrentPosition(showLocation,
errorHandler,
options);
}else{
alert("Sorry, browser does not support geolocation!");
}
}
</script>
]]></Content>
</Module>
现在,我可以将结果作为URL parameter传递给Google Apps Scripts Web App,而不是警报。
这不太理想,但到目前为止似乎工作正常。