geolocation.getCurrentPosition не работает, когда сотовая сеть недоступна - PullRequest
0 голосов
/ 24 февраля 2020

Я работаю над приложением, и в этом приложении я хочу получить getCurrentPosition. Я создал приложение PWA, а также внедрил автономный режим. Поэтому, когда inte rnet доступно, inte rnet недоступно, в обоих случаях оно работает нормально, но когда сотовая сеть недоступна (режим полета), тогда функция geolocation.getCurrentPosition возвращает пустое значение.

Service Worker Код: -

var CACHE_NAME = 'geolocation_cache';
// Install a service worker
self.addEventListener('install', event => {
  event.waitUntil( async function(){
    let cache= await caches.open(CACHE_NAME)
     await cache.addAll(
          [
            '/manifest.json',
            '/geolocationoffline.html',
          ]
        );
      }())
    });

 // Update or Activate a service worker
 self.addEventListener('activate', event =>{
  event.waitUntil( async function(){
    let cacheWhitelist = ['geolocation_cache'];
    let cacheNames = await caches.keys();
     await Promise.all(
      cacheNames.map(element => {
        if(cacheWhitelist.indexOf(element) === -1){
          return caches.delete(element);
        }
      })
     )
  }())
 });

// Cache and return requests
self.addEventListener('fetch', event => {
  event.respondWith( async function(){
    const availableCache= await caches.open('geolocation_cache');
    if(event.request.url.indexOf('/geolocation') < 0){
      const availableCache= await caches.open('geolocation_dynamic');
      try{
      const networkResponse = await fetch(event.request);
      const cachedResponse = await availableCache.match(event.request);
      if(cachedResponse) return cachedResponse;
      const networkResponse = await fetch(event.request);
      event.waitUntil(
        availableCache.put(event.request, networkResponse.clone())
      );
      return networkResponse;
    }
    catch(err){
      const availableCache= await caches.open('geolocation_cache');
      let response=await availableCache.match('/geolocationoffline.html');
      return response;
    }
  }
  else{
      return await fetch(event.request);
  }
  }())
});

Автономная страница: -

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>App</title>
  </head>
  <body>
    <div id="root">
      <h3>Geo Location Offline</h3>
      <p class="time-info"></p>
      <p class="page-info"></p>
    </div>
    <script>
    navigator.geolocation.getCurrentPosition(function(position){
    document.getElementsByClassName("page-info")[0].innerText=`lat=${position.coords.latitude} long=${position.coords.longitude}`;
    document.getElementsByClassName("time-info")[0].innerText=`timeStamp=${position.timestamp}`;
  });
    </script>
  </body>
</html>

1 Ответ

1 голос
/ 24 февраля 2020

Это нормально. Большинство устройств также отключают функцию GPS в режиме полета.

...