我有以下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">
。
当它出现时,会发生以下情况:
<meta name="apple-mobile-web-app-capable" content="yes">
执行此操作我真的坚持如何解决这个问题,但如果这有帮助的话,这是一个有效的例子:
答案 0 :(得分:4)
全屏网络应用中没有重新加载(使用apple-mobile-web-app-capable)。但是,当用户更改位置,然后再次运行应用程序时,它将始终加载页面。它不会触发重载事件,但它会在每次运行时触发onload事件。
如果用户离开应用程序并更改位置,则需要一个简单的“再找一次”功能,只需重新运行代码即可找到当前位置和邮政编码。
现在 - 这是一个问题!我发现在iOS上,这个位置经常被缓存,即使你告诉它只使用一个新的位置,所以有时,你会得到旧的位置。我为这个名为getAccurateCurrentLocation()的方法创建了一个使用非常相似的接口的解决方法。你可以在https://github.com/gwilson/getAccurateCurrentPosition找到代码 - 作为getCurrentPosition()的替代品,它非常简单。
应该这样做。
答案 1 :(得分:-2)
全屏模式在WebSheet中启动浏览器,该WebSheet可能具有一组单独的地理位置权限。也许之前您拒绝在WebSheet中共享地理定位信息,但允许在Safari浏览器中使用它。
如果我没记错的话,WebSheets会不时重置他们的权限,并再次提示用户允许每隔几个小时阅读一次地理位置。