网络工作者的GPS位置不是从工人脚本返回值

问题描述 投票:0回答:1

我工作的一个网络工作者的项目。该网络的工作人员是一个小型的JavaScript文件,确定用户的GPS坐标,并将数据发送回使用的postMessage每5秒的主网页脚本。

我已经测试的JavaScript孤单,它似乎是工作的罚款工人,我可以得到GPS每5分钟坐标和在警告框中显示出来(用于测试),我有过测试,与另一名工人脚本的主网页代码,并将其似乎是工作的罚款,但是当我与工人脚本测试的主要网页代码来获取GPS坐标,没有从工人脚本接收。

任何人都可以请帮我找出为什么这不工作,并提出一个解决办法?

我的目标是有在后台持续运行,并更新每隔5分钟在用户的GPS位置的GPS工人脚本,然后传递这些信息反馈到主网页的脚本,它会显示并存储在MySQL数据库。

这里是主要的网页脚本

<!DOCTYPE html>
<html>
    <head>
    </head> 
        <body onload="startWorker()"> 
            <p>Your GPS Coordinates are:
                <output id="result"></output>
            </p>
            <script>
                var w;

                function startWorker() {
                    if (typeof(Worker) !== "undefined") {
                    if (typeof(w) == "undefined") {
                        w = new Worker("x05.js");
                    }
                    w.onmessage = function(event) {
                    document.getElementById("result").innerHTML = event.data;
                    };
                    } else {
                        document.getElementById("result").innerHTML = "Sorry! No Web Worker support.";
                    }
                }
            </script>
        </body>
</html>

这里是工人文件脚本

function getLocation()
{
    navigator.geolocation.getCurrentPosition(getPosition);
}

function getPosition(position)
{
    var lat = position.coords.latitude;
    var lon = position.coords.longitude;
    var location = 'lat='+position.coords.latitude+'<br>long='+position.coords.longitude;
    postMessage(location);
    setTimeout(getLocation, 5000);

}
getLocation()
javascript html5 web-worker
1个回答
0
投票

你的问题是,从工人范围self.navigator对象是不一样的一种形式,主要适用范围。

你在这里什么是WorkerNavigator对象,这个对象,不像Navigator一个,没有一个geolocation财产。

const w = new Worker(getWorkerURL());
w.onmessage = e => console.log(e.data);

function getWorkerURL() {
  return URL.createObjectURL(new Blob([
    document.querySelector('script[type="worker-script"]')
      .textContent
  ]));
}
<script type="worker-script">
  postMessage(navigator.toString()); // "[object WorkerNavigator]"
  postMessage(navigator.geolocation); // undefined
</script>

你不能从工人中使用地理位置API。 但是,由于这个API是异步的,我不知道为什么你会想反正从工人执行。

© www.soinside.com 2019 - 2024. All rights reserved.