HTML5 navigator.geolocation在网络工作者(HTML5 navigator.

2019-06-26 08:44发布

我想将我的代码navigator.geolocation在一个网络工作者。

我用Chrome和Safari尝试过,但在得到“未定义”

被isGPSSupported = navigator.geolocation;

失意......他们在规范说“导航”的对象应该在网络工作者的支持...

我的代码如下:

index.js

var gpsWorker = new Worker("app/gpsworker.js");

gpsWorker.onmessage = function (e) {
    alert(e.data);
};

gpsWorker.postMessage("Start GPS!");

gpsWorker.onerror = function (e) {
    alert("Error in file: " + e.filename + "\nline: " + e.lineno + "\nDescription: " + e.message);
};

gpsworker.js

self.onmessage = function (e) {
    initGeoLoc();
}

function initGeoLoc() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function (position) {
            self.postMessage("Got position!");
        });
    } else {
        self.postMessage("GPS is not supported on this platform.");
    }
}

什么是错的任何暗示将不胜感激。

Answer 1:

我以前也有类似的问题,因为你,问一个相关的问题 。 现在,我相信我有这个回答你的问题(和我相关的问题也一个)。

navigator.geolocation属于只在主线程导航仪,但不属于在工作线程导航器。

主要的原因是,即使在工作线程导航看起来完全一样的一个主线程,这两个导航对C ++侧独立实现。 这就是为什么navigator.geolocation没有在工作线程的支持。

相关的代码是在Navigator.idl和WorkerNavigator.idl在Chromium代码。 你可以看到,他们在的.idl文件中的两个独立的接口。 他们对结合的C ++侧独立实现。 导航仪的属性DOMWindow ,而WorkerNavigator是一个属性WorkerGlobalScope 。

然而,在JavaScript端,它们具有相同的名称:导航仪。 由于这两个导航是在两个不同的领域,没有名称冲突。 但是,使用JavaScript中的API时,人们通常想到的主,辅助线程类似的行为,如果他们有相同的名称。 这就是不确定性是如何发生的。



Answer 2:

在“导航”的对象支持的,但它仅包含四个属性:应用程序的名字,appVersion,的userAgent,和平台。

从看你的代码,它似乎您试图跟踪用户的位置,因为它的变化。 您不必使用网络工作者做到这一点。 你可以简单地使用watchPosition()主线程,它会自动通知回调函数,每当用户的位置变动对监控用户的位置:

navigator.geolocation.watchPosition(function(position) {
    document.getElementById('currentLat').innerHTML = position.coords.latitude;
    document.getElementById('currentLon').innerHTML = position.coords.longitude;
});


Answer 3:

在Chrome检查它,它看起来绝对不具有地理位置属性:

WorkerNavigator
appName: "Netscape"
appVersion: "5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"
onLine: true
platform: "Win32"
userAgent: "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko)  Chrome/22.0.1207.1 Safari/537.1"
__proto__: WorkerNavigator

在Chrome中,你可以设置你的工人一个断点。 我建议这样做,你的错误,它极有帮助。



Answer 4:

难道不足以在主线程的postMessage的watchPosition(成功)()的新位置,以您的webWorker?



文章来源: HTML5 navigator.geolocation in Web Workers