Javascript - 我的函数地理定位权限 onchange returns 值呈几何级数

Javascript - my function geolocation permission onchange returns value in a geometric progression

这是我的代码,当用户更改地理权限时应该切换按钮

toogleGeoButtons() 工作正常

但是当在 onchange 函数上启动时,它甚至会导致 toogleGeoButtons() 次。所以

function toogleGeoButtons() {
    // toggle function
    console.log("toggled")
}
geoSettings = {
    timeout: 1000 * 10,
    maximumAge: 1000 * 60,
    enableHighAccuracy: true
}
navigatorPermisstion();
function navigatorPermisstion() {
    navigator.permissions.query({
        name: 'geolocation'
    }).then(function(result) {
        if (result.state == 'granted') {
            toogleGeoButtons();
            // console.log(result.state);
            getLocation();
        } else if (result.state == 'prompt') {
            // console.log(result.state);
            navigator.geolocation.getCurrentPosition(revealPosition, positionDenied, geoSettings);
        } else if (result.state == 'denied') {
            toogleGeoButtons();
            // console.log(result.state);
        }
        result.onchange = function() {
            navigatorPermisstion();
        }
    });    
}

function revealPosition(position) {
    console.log(position)
}
function positionDenied(positionError) {
    console.log(positionError)
}

因为您要多次添加函数,所以删除 navigatorPermission();从改变事件开始。

试试这个:

navigatorPermisstion();
function navigatorPermisstion() {
    navigator.permissions.query({
        name: 'geolocation'
    }).then(function(result) {
        if (result.state == 'granted') {
            getLocation();
        } else if (result.state == 'prompt') {
            navigator.geolocation.getCurrentPosition(revealPosition, positionDenied, geoSettings);
        }
        result.onchange = function() {
            toogleGeoButtons();
        }
    });    
}