被W3C地理位置示例代码混淆 - 如果无法找到位置,它会无限循环吗?

时间:2011-11-23 11:21:48

标签: html html5 geolocation w3c

我对W3C Geolocation spec

中此代码示例的安全性感到担忧
// Forcing the user agent to return a fresh cached position.

// Request a position. We only accept cached positions whose age is not
// greater than 10 minutes. If the user agent does not have a fresh
// enough cached position object, it will immediately invoke the error
// callback.
navigator.geolocation.getCurrentPosition(successCallback,
                                         errorCallback,
                                         {maximumAge:600000, timeout:0});

function successCallback(position) {
  // By using the 'maximumAge' option above, the position
  // object is guaranteed to be at most 10 minutes old.
  // By using a 'timeout' of 0 milliseconds, if there is
  // no suitable cached position available, the user agent 
  // will aynchronously invoke the error callback with code
  // TIMEOUT and will not initiate a new position
  // acquisition process.
}

function errorCallback(error) {
  switch(error.code) {
    case error.TIMEOUT:
      // Quick fallback when no suitable cached position exists.
      doFallback();
      // Acquire a new position object.
      navigator.geolocation.getCurrentPosition(successCallback, errorCallback);
      break;
    case ... // treat the other error cases.
  };
}

function doFallback() {
  // No fresh enough cached position available.
  // Fallback to a default position.
}

如果浏览器真的无法以任何理由返回位置修复,并且保持超时,会发生什么?

当然,代码将以无限循环结束,一遍又一遍地调用errorCallback。

我看到doFallback()调用,但不会停止重复调用errorCallback。或者会吗?

2 个答案:

答案 0 :(得分:3)

error.code将返回POSITION_UNAVAILABLE。规范中的代码是无限循环,因为我猜它正是他们想要的。想象一下您处于导航模式,在太空中移动的场景。有时候,你通过一个隧道,你丢失了网络,并且在一段时间内无法控制你的任何位置。然后当离开隧道时,能够自动获得位置是很好的。在需要一次性值的场景中,这段代码将没有用处,但随后很容易修改以停止并显示错误消息。

答案 1 :(得分:0)

您可能遇到的错误是Google Chrome浏览器可能不支持Geolocation。

尝试在多个浏览器上测试您的网页,看看它对您有何帮助。