微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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​​时,如果主线程和工作线程具有相同的名称,人们通常会期望类似的行为.这就是歧义发生的方式.

原文地址:https://www.jb51.cc/html/226114.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐