Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何过期或重置地理位置_Javascript_Html_Geolocation_Location - Fatal编程技术网

Javascript 如何过期或重置地理位置

Javascript 如何过期或重置地理位置,javascript,html,geolocation,location,Javascript,Html,Geolocation,Location,当用户访问我的网站时,我会检查是否在PHP中设置了位置会话。如果在中没有设置用户位置的会话,我会将他们重定向到www.domain.net/location。在该页面上,有许多选项供用户选择位置。如果浏览器允许,其中一个选项是使用浏览器进行设置。下面的代码工作得非常好 我遇到的问题是,一旦用户允许浏览器共享该位置,这似乎将永远被设置。当用户浏览时,他们可能会决定更改位置,然后单击按钮再次转到www.domain.net/location页面。在没有任何弹出窗口的情况下,它会自动拾取浏览器的位置并

当用户访问我的网站时,我会检查是否在PHP中设置了位置会话。如果在中没有设置用户位置的会话,我会将他们重定向到www.domain.net/location。在该页面上,有许多选项供用户选择位置。如果浏览器允许,其中一个选项是使用浏览器进行设置。下面的代码工作得非常好

我遇到的问题是,一旦用户允许浏览器共享该位置,这似乎将永远被设置。当用户浏览时,他们可能会决定更改位置,然后单击按钮再次转到www.domain.net/location页面。在没有任何弹出窗口的情况下,它会自动拾取浏览器的位置并重定向它们。页面上还有其他位置选项,包括可单击的地图,我确实需要能够重置、过期、删除、强制某些内容,以便浏览器再次询问用户是否希望使用浏览器设置位置或允许用户使用其他选项之一

我唯一能想到的是将下面的实际Javascript移动到另一个页面上,在www.domain.net/location页面上有另一个按钮,上面写着“使用我的精确位置”,然后链接到下面的JS

有人知道重置这个或什么的其他方法吗

<script type="text/javascript" charset="utf-8">


    function findLocation()
    {
      var options = {timeout: 60000};
      navigator.geolocation.getCurrentPosition(foundLocation, noLocation, options);
    }

    function foundLocation(position)
    {
      var lat = position.coords.latitude;
      var lng = position.coords.longitude;

      //alert('Found location: ' + lat + ', ' + lng);
      window.location = "http://www.domain.net/?lat=" + lat + "&lng=" + lng;
    }

    function noLocation()
    {
      alert('Could not find location');
      window.location = "http://www.domain.net/location";
    }

    findLocation();


  </script>

函数findLocation()
{
var选项={timeout:60000};
navigator.geolocation.getCurrentPosition(foundLocation、noLocation、options);
}
功能位置(位置)
{
var lat=位置坐标纬度;
var lng=位置坐标经度;
//警报('找到的位置:'+lat+','+lng);
window.location=”http://www.domain.net/?lat=“+lat+”&lng=“+lng;
}
函数noLocation()
{
警报(“找不到位置”);
window.location=”http://www.domain.net/location";
}
findLocation();

我承认只玩过几次Javascript位置API,但我的理解是浏览器存储用户偏好(这一假设似乎得到了加强)

引用的页面表明,用户的首选项存储在每个站点(域)的基础上,而不是每个URL。如果不是这样,那么向URL添加随机字符串值就可以了。编辑:我已选中,并且每个域定义了豁免:


这将使您建议将代码推迟到另一个页面,或者将其绑定到一个不在页面加载上运行的事件,这是我能马上想到的最佳解决方案。

这是每个浏览器的设置,不是您可以在脚本端控制的。您可以做的是提供一个链接,解释如何为给定浏览器更新特定网站的地理位置设置


似乎您可以通过链接到
/location
,而不是链接到
/location?update
或类似的方式来解决您的特定问题。基本上,转到位置页面,但添加一些阻止自动重定向的内容,以便用户可以对其位置做出不同的决定。

我已决定添加?将位置更改到URL的末尾,并使用PHP检查,然后在页面上隐藏Javascript。这不是一个很好的解决方案,但它确实看起来像是每个浏览器的设置,而不是可以使用脚本重置的设置。似乎一旦用户说了“记住我的首选项”,它就会这样做,直到他们深入了解设置并在浏览器上更改此设置。

如果用户授予您的站点使用其位置的权限,它只会在浏览器安全设置中存储“允许”以及您的站点url。它不存储实际位置。这是通过代码实现的。 如果您想使用一个新位置,只需使用javascript即可

navigator.geolocation.getCurrentPosition(function(position) {
  do_something(position.coords.latitude, position.coords.longitude);
});
有关获取地理位置的更多信息,请参见此处:

如果您将该位置存储在cookie中并重新使用该位置,只需清除cookie并将其重置,或者根本不使用cookie


要查看Chrome存储的地理位置设置,请打开Chrome选项“三重栏”>settings>advanced…>在“隐私”下,单击“内容设置”>“位置”下,单击“管理例外情况”。

这应该是一条评论,而不是一个答案(也许是对我答案的评论,因为这或多或少是我描述的操作)。