
我尝试使用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.idl和WorkerNavigator.idl中.您可以看到它们是.IDl文件中的两个独立接口.并且它们在绑定的C端具有独立的实现. Navigator是DOMWindow的属性,而WorkerNavigator是WorkerGlobalScope的属性.
但是,在JavaScript方面,它们具有相同的名称:navigator.由于两个导航器位于两个不同的范围内,因此没有名称冲突.但是当在JavaScript中使用API时,如果主线程和工作线程具有相同的名称,人们通常会期望类似的行为.这就是歧义发生的方式.
总结以上是内存溢出为你收集整理的Web Workers中的HTML5 navigator.geolocation全部内容,希望文章能够帮你解决Web Workers中的HTML5 navigator.geolocation所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)