允许 HTML5 Web 应用在浏览器未聚焦时访问位置 (iOS)
Posted
技术标签:
【中文标题】允许 HTML5 Web 应用在浏览器未聚焦时访问位置 (iOS)【英文标题】:Allow HTML5 web app to access location when browser isn't focused (iOS) 【发布时间】:2015-02-18 04:57:11 【问题描述】:我最近构建了一个 html5 网络应用程序,旨在在接近设定的目的地时通知用户。我已将其设置为缓存,因此无需网络访问即可在具有 GPS 或 AGPS 功能的设备中使用它。因此,要设置图片,它是一个网络应用程序,我已经缓存并添加到主屏幕以使其 像 成为本机应用程序,但它实际上只是一个 HTML5 应用程序(使用 javascript)。
应用程序本身似乎正在运行(就检测用户的位置而言,它没有返回任何错误,因为我知道它会返回),但我发现它存在一个主要问题;当应用程序不再处于焦点时,HTML5 地理定位功能会在短时间内停止工作(我知道这是因为当我运行它并更改为不同的应用程序时,地理定位指示器会从 iPhone 的屏幕上消失,但是当我有应用程序处于焦点,地理定位图标仍然存在)。
我打算让应用程序在用户距离目的地 200 米以内时,应用程序的窗口成为焦点,并向用户发送警报,通知他们正在接近目的地。因此,它被设计为在后台工作。
问题在于,至少在 iPhone 上,Web 应用程序似乎只能在窗口聚焦时才能访问地理位置(我假设是这种情况,因为我进入 iPhone 上的位置设置并在下面看到我的应用程序的位置设置仅在应用程序正在使用时启用跟踪位置,即当应用程序在屏幕上可见时)。
我正在寻找一种方式(在 HTML5 或 JS 中)即使在屏幕上看不到应用程序时,该应用程序也可以继续监控用户的位置。
这是我用来检测用户位置的代码:
function getLocation()
if(geo_position_js.init())
geo_position_js.getCurrentPosition(success_callback,error_callback,enableHighAccuracy:true);
else
alert("Warning: unable to determine your position!");
function watchCurrentPosition()
navigator.geolocation.watchPosition(success_callback, error_callback, enableHighAccuracy:true);
function success_callback(p)
return [p.coords.longitude.toFixed(2), p.coords.latitude.toFixed(2)];
function error_callback(p)
alert("Warning - error!");
如果有任何用处,我将在 iPhone 6 上的 ios 8.1.3 上运行它。提前致谢!
【问题讨论】:
【参考方案1】:经过进一步研究和测试,我找到了以下答案:
-
Q/A 1:我测试了第一个答案中建议的 iFrame 方法,但发现它不起作用并导致出现错误,如 cmets 中建议的那样
Q/A 2:这里的答案似乎是目前的情况。
所以只要应用程序本身是当前窗口,它看起来应该可以工作,而且我的测试会同意这个结论。没有让它成为一个完整的原生应用程序,这对于像我这样不是全职应用程序开发人员的人来说是一个有点昂贵的冒险,这似乎是不可能的。 HTML5 的地理定位功能似乎更适合 Web 应用程序,用户可以通过地图而不是地理定位监控来检查他们的位置!
【讨论】:
以上是关于允许 HTML5 Web 应用在浏览器未聚焦时访问位置 (iOS)的主要内容,如果未能解决你的问题,请参考以下文章