簡體   English   中英

GPS位置的Web Worker無法從輔助腳本返回值

[英]Web Worker for GPS location not returning vales from worker script

我正在從事網絡工作者項目。 網絡工作者是一個小的javascript文件,它確定用戶的GPS坐標,並使用postMessage每5秒將數據發送回首頁腳本。

我已經單獨測試了工人javascript,它似乎工作正常,我每隔5分鍾就能獲取GPS坐標,並將其顯示在警報框中(以進行測試),並且我還使用其他工人腳本測試了主頁代碼,似乎工作正常,但是當我使用工作程序腳本測試主頁代碼以獲取GPS坐標時,工作程序腳本什么也沒收到。

誰能幫我找出為什么這不起作用並提出解決方案?

我的目標是要有一個gps工作程序腳本,該腳本在后台連續運行,並每5分鍾更新一次用戶的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()

您的問題是,Worker范圍中的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> 

您不能在Worker內使用Geolocation API。
但是由於此API是異步的,因此我不確定為什么您仍要從Worker中執行它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM