Web Workers中的HTML5 navigator.geolocation

前端之家收集整理的这篇文章主要介绍了Web Workers中的HTML5 navigator.geolocation前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在web worker中移动navigator.geolocation的代码.

我尝试使用Chrome和Safari,但是“未定义”

var isGPSSupported = navigator.geolocation;

沮丧……他们在规范中说,网络工作者应该支持’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.");
    }
}

任何有关错误提示都将不胜感激.

解决方法

我和你之前有过类似的问题,问了 a related question.现在我相信我的答案是你的问题(也是我的一个相关问题).

navigator.geolocation仅属于主线程中的导航器,但不属于工作线程中的导航器.

主要原因是即使工作线程中的导航器看起来与主线程中的导航器完全相同,这两个导航器在C端也有独立的实现.这就是工作线程中不支持navigator.geolocation的原因.

相关代码位于Chromium代码Navigator.idlWorkerNavigator.idl中.您可以看到它们是.idl文件中的两个独立接口.并且它们在绑定的C端具有独立的实现. Navigator是DOMWindow属性,而WorkerNavigator是WorkerGlobalScope属性.

但是,在JavaScript方面,它们具有相同的名称:navigator.由于两个导航器位于两个不同的范围内,因此没有名称冲突.但是当在JavaScript中使用API​​时,如果主线程和工作线程具有相同的名称,人们通常会期望类似的行为.这就是歧义发生的方式.

猜你在找的HTML相关文章