地理位置不适用于苹果移动网络应用程序功能
Geolocation not working with apple-mobile-web-app-capable?
我有以下JS在#zip
中显示当前用户的邮政编码:
(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);
});
在移动野生动物园中,这两个功能可以很好地协同工作。如果用户打开网页,它将加载用户的当前邮政编码。然后,如果用户更改了位置,则用户可以通过点击 botton 重新加载页面。这工作正常,除非存在<meta name="apple-mobile-web-app-capable" content="yes">
。
当它存在时,会发生什么:
- 用户点击主屏幕上的图标
- 网页打开,地址栏隐藏,
<meta name="apple-mobile-web-app-capable" content="yes">
执行此操作 - 邮政编码加载如预期的那样
- 用户移动位置,点击重新加载按钮
- 页面无法显示邮政编码,控制台上没有错误
我真的坚持如何解决这个问题,但如果这有帮助,这里有一个工作示例:
http://www.codekraken.com/testing/zipper/zip.html
全屏 Web 应用程序中没有重新加载(使用 Apple-mobile-web-appable)。 但是,当用户更改位置,然后再次运行应用时,它将始终加载页面。 它不会触发重新加载事件,但会在每次运行时触发 onload 事件。
如果用户让应用保持运行状态并更改位置,你将需要一个简单的"再次查找我"函数,只需重新运行代码即可查找当前位置和邮政编码。
现在 - 这是一个问题! 我发现在iOS上,位置经常被缓存,即使你告诉它只使用一个新的位置,所以有时,你会得到旧的位置。 我为此创建了一个称为getAccurateCurrentLocation()的解决方法,它使用非常相似的接口。 您可以在 https://github.com/gwilson/getAccurateCurrentPosition 中找到代码 - 作为getCurrentPosition()的替代品非常简单。
这应该可以做到。
如果其他人有困惑(就像我一样),这里涉及的方法就是地理位置对象的本机"watchPosition"方法。
观察位置 MDN 规格
当用户移动位置时,将调用 watchPosition 方法,您可以将经度/经度到 zip 生成器指定为回调。
从规格:
var watchID = navigator.geolocation.watchPosition(function(position) {
do_something(position.coords.latitude, position.coords.longitude);
});
所以看起来你可以做到:
var watchID = navigator.geolocation.watchPosition(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);
});
}
);
});
这将实现更多的简单性 - 用户不必点击位置按钮,它应该已经在他们移动时更新。
需要明确的是,Greg的函数使用这个watchPosition方法,但如果你想了解工作是什么,或者使用更精简的本机代码并自己自定义它,watchPosition就是你的工具。
全屏模式在可能具有一组单独地理位置权限的 WebTable 中启动浏览器。也许以前您拒绝在WebSheet中共享地理位置信息,但允许在Safari浏览器中共享。
如果我没记错的话,众所周知,WebSheets会不时重置其权限,并再次提示用户每隔几个小时允许读取地理位置。
- 使用acess代币登录Facebook,并通过网络应用程序离线发布
- 链接两个网页或网络应用程序的最佳方式
- 如何减少在移动网络应用程序上播放声音的延迟
- 在Android网络应用程序中查找SD卡的路径
- 如何处理IOS网络应用程序中的空锚点
- 如何将某个“;函数“;在Node.js的网络应用程序中
- 独立离线的html5网络应用程序
- 如何使网络应用程序保留信息
- 使用谷歌应用程序脚本制作基于谷歌电子表格的带有列表框的网络应用程序
- 如何在网络应用程序中使用Firebase进行用户授权
- 如何退出全屏网络应用程序
- 从使用react路由器的网络应用程序解析物理URL
- 是否可以在第三方网站中嵌入谷歌网络应用程序
- 如何从我的机器提供HTML + JS + CSS网络应用程序,以便其他人可以查看它
- 地理位置不适用于苹果移动网络应用程序功能
- 移动网络应用程序:在多分辨率设备中使用同一组图像
- 网络应用程序的正确instagram身份验证方法(没有instagram帐户的用户)
- 检测网络应用程序是否已在安卓系统的主屏幕上添加书签
- 将类添加到<身体>如果在“;“有能力”;iOS 7上的网络应用程序
- 网络应用程序中绘制的谷歌柱状图错误