检查浏览器's定位是否只打开过一次

Check if browser's location turned on Only once

本文关键字:一次 浏览器 是否 定位 检查      更新时间:2023-09-26

我使用navigator.geolocation.watchPosition函数来检查浏览器的位置是否打开。但是这个函数被调用了不止一次(没有页面加载)。例如,如果我切换到另一个选项卡,然后回到页面的选项卡,它会被调用。

我的代码是
<script>
navigator.geolocation.watchPosition(function (position) {
   alert("i'm tracking you!");
},
function (error) {
   if (error.code == error.PERMISSION_DENIED){
      alert("you denied me :-(");
   }
});
</script>

我怎么能只调用一次函数?

只需跟踪watchPosition函数是否触发了您的函数:

var firedAlready = false;
navigator.geolocation.watchPosition(function (position) {
   if(!firedAlready) {
      alert("i'm tracking you!");
      firedAlready = true;
   }
},
function (error) {
   if (error.code == error.PERMISSION_DENIED){
      alert("you denied me :-(");
   }
});

尝试为您的代码创建一个框!这将确保它只执行一次。

var something = (function() {
    var executed = false;
    return function () {
        if (!executed) {
            executed = true;
            // do something
        }
    };
})();

还要考虑禁用navigator.geolocation.clearWatch()的事件处理程序。例如:

var id;
id = navigator.geolocation.watchPosition(function (position) {
    alert("i'm tracking you!");
    navigator.geolocation.clearWatch(id);
},
function (error) {
    if (error.code == error.PERMISSION_DENIED){
        alert("you denied me :-(");
        // I suspect this is actually unnecessary since we were denied.
        navigator.geolocation.clearWatch(id);
    }
});

有关更多详细信息,请查看有关Geolocation.clearWatch()的MDN页面

您可以在已经获得结果时清除位置侦听器。

输入链接描述

或者你可以使用navigator.geolocation. getcurrentposition来测试它是打开还是关闭

您需要将检查权限的状态保存在本地存储中,以便长期使用或更好地使用该站点的cookie,并将首选项保存在那里。

如果你只在页面重载的时候调用一个变量,这个变量会被重新初始化。

你的数据需要是持久的

如果你不熟悉cookie,从这里开始http://www.w3schools.com/js/js_cookies.asp