我正在使用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>
我怎样才能只调用一次该功能?
答案 0 :(得分:1)
只需跟踪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 :-(");
}
});
答案 1 :(得分:0)
尝试为您的代码创建一个机箱!这将确保它只执行一次。
var something = (function() {
var executed = false;
return function () {
if (!executed) {
executed = true;
// do something
}
};
})();
答案 2 :(得分:0)
还考虑使用navigator.geolocation.clearWatch()
禁用事件处理程序。
E.g:
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);
}
});
有关详细信息,请查看the MDN page about Geolocation.clearWatch()。
答案 3 :(得分:0)
您可以在获得结果后清除位置监听器。
或者您可以使用navigator.geolocation.getCurrentPostion来测试是打开还是关闭。
答案 4 :(得分:0)
您需要保存在本地存储中检查权限的状态,以便长时间使用,或者更好地使用该网站的Cookie并在此处保存首选项。
如果您只在重新加载页面时执行变量,则重新初始化变量。
您的数据需要持久。
如果您是饼干新手,请从这里开始 http://www.w3schools.com/js/js_cookies.asp