Как заставить библиотеку webshim polyfill работать в React? - PullRequest
0 голосов
/ 25 июня 2019

Я хочу получить доступ к функции геолокации из библиотеки webshim, но мне не удалось определить правильную настройку, чтобы она заработала?

Я уже получаю доступ к встроенной функции браузера geolocation, но хочунастроить polyfill в случае браузеров, которые не имеют функции geolocation.

webshim


    import React from "react";
    import webshim from 'webshim';
    import $ from 'jquery';

    class PlayGround extends React.Component{

        pickLocation = () => {
            console.log("Inside here")
                webshim.ready('geolocation', () => {
                    navigator.geolocation.getCurrentPosition(function(pos){
                    alert("Thx, you are @ latitude: "+ pos.coords.latitude +"/longitude: " + pos.coords.longitude);
                });
              });
        console.log("end inside")
        }
    }

1 Ответ

0 голосов
/ 25 июня 2019

Использование polyfill для поддержки Geolocations не будет работать.Получение местоположения из браузера требует встроенной поддержки.

Почти весь браузер поддерживает геолокацию, https://caniuse.com/#feat=geolocation

Вместо этого вам следует проверить, поддерживает ли браузер геолокацию или нет.Если это не поддерживается, с ошибкой произойдет сбой (покажите пользователю ошибку)

function fetchLocation() {
    var options = {
        enableHighAccuracy: true,
        timeout: 5000,
        maximumAge: 0
    };
    navigator.geolocation.getCurrentPosition(success, error, options);
}

function success(pos) {
    var crd = pos.coords;
    console.log('Your current position is:');
    console.log(`Latitude : ${crd.latitude}`);
    console.log(`Longitude: ${crd.longitude}`);
    console.log(`More or less ${crd.accuracy} meters.`);
}

function error(err) {
    console.warn(`ERROR(${err.code}): ${err.message}`);
}


if(window.location.protocol == "https:" && navigator.geolocation) {
    fetchLocation();
} else {
    // We cannot access the geolocation, show some error
}
...