Web Workers中的HTML5 navigator.geolocation

Web Workers中的HTML5 navigator.geolocation,html,geolocation,gps,web-worker,Html,Geolocation,Gps,Web Worker,我正在尝试在web worker中移动navigator.geolocation的代码 我在Chrome和Safari上试过了,但是没有定义 var isgpssuported=navigator.geology 沮丧的。。。他们在规范中说web workers应该支持“navigator”对象 我的代码如下: index.js var gpsWorker = new Worker("app/gpsworker.js"); gpsWorker.onmessage = function (e)

我正在尝试在web worker中移动navigator.geolocation的代码

我在Chrome和Safari上试过了,但是没有定义

var isgpssuported=navigator.geology

沮丧的。。。他们在规范中说web workers应该支持“navigator”对象

我的代码如下:

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.");
    }
}

任何关于错误的提示都将不胜感激。

在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中,您可以在workers中设置断点。对于您的错误,我建议您这样做,这非常有帮助。

支持“导航器”对象,但它只包含四个属性:appName、appVersion、userAgent和platform

通过查看您的代码,您似乎正在试图跟踪用户的位置,因为它发生了变化。您不必使用web workers来完成此任务。您只需使用watchPosition()监视用户在主线程上的位置,每当用户的位置发生更改时,它将自动通知回调函数:

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

我有一个和你以前一样的问题,我问了你。现在我相信我已经回答了你的问题(以及我的一个相关问题)

geolocation只属于主线程中的navigator,而不属于工作线程中的navigator

主要原因是,即使在WorkthWork线程中的导航器与主线程中的导航器完全相同,但这两个导航器在C++方面都有独立的实现。这就是工作线程中不支持navigator.geolocation的原因

相关代码为和铬代码。您可以看到它们是.idl文件中的两个独立接口。并且它们在绑定的C++侧具有独立的实现。Navigator是的属性,而WorkerNavigator是的属性


但是,在JavaScript方面,它们有相同的名称:navigator。由于两个导航器位于两个不同的作用域中,因此没有名称冲突。但是当在JavaScript中使用API时,如果主线程和工作线程的名称相同,人们通常期望它们的行为相似。这就是模棱两可的情况。

将主线程postMessage()中的watchPosition(success)作为webWorker的新位置是不够的吗?

虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-阿什,答案在上面的第一行。这些链接提供了未来解决方案的背景信息。为理查兹干杯,但如果我们最小化浏览器或屏幕关闭,这是行不通的