地理位置无法使用apple-mobile-web-app?

时间:2012-08-07 23:18:15

标签: javascript jquery geolocation mobile-safari iphone-standalone-web-app

我有以下JS在#zip中显示当前用户的Zipcode:

(function ($, geolocation) {
    if (geolocation) {
        geolocation.getCurrentPosition(function (position) {
            $.getJSON(
                "http://ws.geonames.org/findNearestAddressJSON?callback=?",
                {
                    lat : position.coords.latitude,
                    lng : position.coords.longitude
                },
                function (data) {
                    $(function () {
                        $('#zip').text(data.address.postalcode);
                    });
                }
            );
        });
    }
}(jQuery, navigator.geolocation));

我还有一个JS函数来重新加载页面:

$('.reload').click(function(){
    window.location.reload(true);
});

在Mobile Safari中,这两个功能可以很好地协同工作。如果用户打开网页,它将加载用户的当前邮政编码。然后,如果用户更改位置,则用户可以通过点击按钮来重新加载页面。 此工作正常,除非存在<meta name="apple-mobile-web-app-capable" content="yes">

当它出现时,会发生以下情况:

  1. 用户点击主屏幕上的图标
  2. 网页打开,地址栏隐藏,<meta name="apple-mobile-web-app-capable" content="yes">执行此操作
  3. Zipcode加载应该
  4. 用户移动位置,点按重新加载按钮
  5. 页面无法显示邮政编码,未在控制台中记录任何错误
  6. 我真的坚持如何解决这个问题,但如果这有帮助的话,这是一个有效的例子:

    http://www.codekraken.com/testing/zipper/zip.html

2 个答案:

答案 0 :(得分:4)

全屏网络应用中没有重新加载(使用apple-mobile-web-app-capable)。但是,当用户更改位置,然后再次运行应用程序时,它将始终加载页面。它不会触发重载事件,但它会在每次运行时触发onload事件。

如果用户离开应用程序并更改位置,则需要一个简单的“再找一次”功能,只需重新运行代码即可找到当前位置和邮政编码。

现在 - 这是一个问题!我发现在iOS上,这个位置经常被缓存,即使你告诉它只使用一个新的位置,所以有时,你会得到旧的位置。我为这个名为getAccurateCurrentLocation()的方法创建了一个使用非常相似的接口的解决方法。你可以在https://github.com/gwilson/getAccurateCurrentPosition找到代码 - 作为getCurrentPosition()的替代品,它非常简单。

应该这样做。

答案 1 :(得分:-2)

全屏模式在WebSheet中启动浏览器,该WebSheet可能具有一组单独的地理位置权限。也许之前您拒绝在WebSheet中共享地理定位信息,但允许在Safari浏览器中使用它。

如果我没记错的话,WebSheets会不时重置他们的权限,并再次提示用户允许每隔几个小时阅读一次地理位置。