1

我创建了以下两个文件:

代码.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 保存在一个文件中并在浏览器中打开它,它会按预期工作。

有任何想法吗?

4

4 回答 4

2

自 2016 年起,地理位置可在 IFRAME 模式下与 HtmlService 一起使用。在这里测试它:GAS-geolocation

用 Chrome 和 Firefox(桌面)测试,都可以。不适用于 Safari(桌面)(共享位置确认框不会弹出。我讨厌 Safari!)

有趣的是,它适用于 iOS 9 上的 Safari,但不适用于 iOS 9 上的最新 Chrome。(同样的问题,没有确认弹出窗口)

于 2016-02-24T02:59:49.903 回答
1

我相信,卡哈是这里的罪魁祸首。您能否在Caja 操场上运行您的代码以检查行为是否相同。如果相同,您可以在Caja 问题跟踪器中打开问题

要了解更多 Caja 对 HtmlService 的作用,您可以参考此页面

更新 上面的答案已过时。现在可以使用浏览器中可用的 navigator.geolocation 对象访问位置。

于 2012-10-01T09:15:44.523 回答
1

GeoLocation 在 HtmlService 中尚不可用

于 2012-10-04T13:51:49.727 回答
0

我刚刚尝试了您的代码,因为我想在 Google 协作平台中使用 Google Apps 脚本做一些事情。

目前 HTMLService 似乎仍然不支持 GeoLocation,但我找到了一种可能的解决方法来满足我的特定需求(即与 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 参数传递给 Google Apps Scripts Web App,而不是警报。

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

于 2014-12-12T10:21:22.003 回答