[英]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.