允许 HTML5 网络应用在浏览器未聚焦时访问位置 (iOS)
Allow HTML5 web app to access location when browser isn't focused (iOS)
我最近构建了一个 HTML5 网络应用程序,旨在在接近设定的目的地时通知用户。我已将其设置为缓存,因此无需网络访问即可在具有 GPS 或 AGPS 功能的设备中使用它。因此,要设置图片,它是一个网络应用程序,我已经缓存并添加到主屏幕以使其 像 本机应用程序,但它实际上只是一个 HTML5应用程序(Javascript)。
该应用程序本身似乎可以正常工作(只要检测用户的位置,因为它没有返回任何错误,否则我知道它会),但我发现了它的一个主要问题; HTML5 地理定位功能在应用程序不再处于焦点后的短时间内停止工作(我知道这一点是因为当我 运行 它并切换到另一个应用程序时,地理定位指示器从iPhone 的屏幕,但当我聚焦应用程序时,地理定位图标仍然存在)。
我打算让该应用运行,以便当用户距离目的地 200 米以内时,应用的 window 成为焦点,并向用户发送警报,通知他们他们正在接近目的地.因此,它被设计为在后台工作。
问题是,至少在 iPhone 上,网络应用程序似乎只有在 window 聚焦时才能进行地理定位访问(我假设是这种情况,因为我进入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!");
}
我 运行 在 iOS 8.1.3 和 iPhone 6 上 运行 如果它有用的话。提前致谢!
经过进一步的研究和测试,我找到了以下答案:
- Q/A 1: 我测试了第一个答案中建议的 iFrame 方法,但发现它不起作用并导致出现评论中建议的错误
- Q/A 2:这里的答案目前看来是这样的
所以只要应用程序本身是当前的 window,它似乎应该可以运行,我的测试会同意这个结论。如果不能让它成为一个完整的原生应用程序,这对于像我这样不是全职应用程序开发人员的人来说是一个有点昂贵的冒险,这似乎是不可能的。 HTML5 的地理定位功能似乎更适合网络应用程序,用户可以通过地图而不是地理定位监控来检查他们的位置!
我最近构建了一个 HTML5 网络应用程序,旨在在接近设定的目的地时通知用户。我已将其设置为缓存,因此无需网络访问即可在具有 GPS 或 AGPS 功能的设备中使用它。因此,要设置图片,它是一个网络应用程序,我已经缓存并添加到主屏幕以使其 像 本机应用程序,但它实际上只是一个 HTML5应用程序(Javascript)。
该应用程序本身似乎可以正常工作(只要检测用户的位置,因为它没有返回任何错误,否则我知道它会),但我发现了它的一个主要问题; HTML5 地理定位功能在应用程序不再处于焦点后的短时间内停止工作(我知道这一点是因为当我 运行 它并切换到另一个应用程序时,地理定位指示器从iPhone 的屏幕,但当我聚焦应用程序时,地理定位图标仍然存在)。
我打算让该应用运行,以便当用户距离目的地 200 米以内时,应用的 window 成为焦点,并向用户发送警报,通知他们他们正在接近目的地.因此,它被设计为在后台工作。
问题是,至少在 iPhone 上,网络应用程序似乎只有在 window 聚焦时才能进行地理定位访问(我假设是这种情况,因为我进入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!");
}
我 运行 在 iOS 8.1.3 和 iPhone 6 上 运行 如果它有用的话。提前致谢!
经过进一步的研究和测试,我找到了以下答案:
- Q/A 1: 我测试了第一个答案中建议的 iFrame 方法,但发现它不起作用并导致出现评论中建议的错误
- Q/A 2:这里的答案目前看来是这样的
所以只要应用程序本身是当前的 window,它似乎应该可以运行,我的测试会同意这个结论。如果不能让它成为一个完整的原生应用程序,这对于像我这样不是全职应用程序开发人员的人来说是一个有点昂贵的冒险,这似乎是不可能的。 HTML5 的地理定位功能似乎更适合网络应用程序,用户可以通过地图而不是地理定位监控来检查他们的位置!