Метод Firebase Realtime для извлечения данных не работает в Safari, в то время как тот же код отлично работает в Chrome, Opera, Firefox и Samsung Internet. - PullRequest
0 голосов
/ 19 марта 2020

как выглядит сайт chrome, opera и firefox и вывод консоли: (эти сообщения консоли предназначены только для отладки)

как выглядит сайт chrome

Вывод на консоль от chrome

Теперь сайт на Safari и ошибка, которую он мне выдает:

внешний вид веб-сайт, как вы можете видеть, маркеры не размещаются, потому что код сталкивается с ошибкой

Консоль говорит, что snapshot.val не определен (строка 20)

текст версия ошибки:

Необработанное отклонение обещания: Ошибка типа: undefined не является объектом (оценивается как «snapshot.val») (map. js строка 20)

Фрагмент кода Js это дает мне ошибку:

var map;
var globalmarkers = [];
var globalmarkerC
var marker = {};
var geocoder;


function initMap(){
    
    map = new google.maps.Map(document.getElementById('map'), {
        center: {lat: 44.854031, lng: -93.460167},
        zoom: 13
    });
    console.log('ok');
    
    var key;
    var locationsRef = firebase.database().ref("Locations");
    geocoder = new google.maps.Geocoder();
    locationsRef.on('child_added', async function(snapshot) {

    var data = snapshot.val(); // where the error is happening.
    var key = snapshot.key;
    console.log(data);
    console.log(key);
   
    var ref = firebase.database().ref("LocationsCategory/" + key);

    var snapshot = await ref.once('value');
    var value = snapshot.val().category;
    console.log(value);
    var f;
    if(value == "TP"){
        f = "assets/toilet-paper.png";
    }
    if(value == "FD"){
        f = "assets/food.png";
    }
    if(value == "WR"){
        f = "assets/water.png";
    }
    if(value == "OR"){
        f = "assets/more.png";
    }

    marker = new google.maps.Marker({ // create a marker and set id
        position: {
            lat: data.l[0],
            lng: data.l[1]
        },
        map: map,
        key_id : key,
        icon: f

    });

    globalmarkers.push(marker);

    });

    locationsRef.on('child_removed', function(snapshot) {
        var data = snapshot.val();
        var key = snapshot.key;
        console.log(data);
        var x;
        for(x in globalmarkers){
            if(globalmarkers[x].key_id == key){
                globalmarkers[x].setMap(null);
                console.log('removed')
            }
        };

        });

        locationsRef.on('child_changed', function(snapshot) {
            var data = snapshot.val();
            var key = snapshot.key;
            console.log(data);
            var x;
            for(x in globalmarkers){
                if(globalmarkers[x].key_id == key){
                    var p = {lat: data.l[0], lng: data.l[1]};
                    globalmarkers[x].setPosition(p);
                }
            };
    
            });
   
            housekeeping();

}


         

Может кто-нибудь сказать мне, почему код работает в Chrome и других браузерах, но не в Safari? Также Как я могу исправить эту проблему.

...