地理定位不适用于HtmlService

时间:2012-10-01 03:19:35

标签: google-apps-script

我创建了以下两个文件:

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>

当我调用已发布的U​​RL时,我会收到预期的消息和按钮。单击按钮,我收到失败消息“不支持地理位置”。如果我将html.html保存在文件中并在浏览器中打开它,它会按预期工作。

有什么想法吗?

4 个答案:

答案 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协作平台小工具”

使用tutorials point

中的示例代码

我最终为我的小工具提供了一个'骨架'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,而不是警报。

这不太理想,但到目前为止似乎工作正常。