2016-11-17 51 views
0

我正在使用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

设置cookie标记或窗口会话存储 – M14

回答

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 :-("); 
    } 
}); 
+0

它不会工作,重新载入页面将重新初始化烧制已经和宥重新开始。该数据需要持久(阅读我的答案) –

+0

他说,它没有页面加载重新调用,所以我回答了如何阻止它没有页面加载重新调用。是的,如果在页面加载之后他不想再次调用它,那么答案就会不同,但他没有这样说。 – Joe

+0

你是对的,但是从起步开始,它要比逐步走向更好(时间明智),但从错误到错误是很好的,因为这是最好的学习方式。而且,拒绝跟踪和切换选项卡会导致另一个警报,每次如果您不接受它(不那么用户友好)。纯粹是我的意见。 –

0

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

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

另请考虑使用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); 
    } 
}); 

有关详情,请the MDN page about Geolocation.clearWatch()

0

当您已经得到结果时,您可以清除位置侦听器。

enter link description here

或者你也许还可以利用navigator.geolocation.getCurrentPostion来测试是否是打开还是关闭。

0

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

如果您只在页面重新加载时执行变量,则该变量将重新初始化。

您的数据需要持久。

从这里开始,如果你是新与cookies http://www.w3schools.com/js/js_cookies.asp

相关问题