navigator.geolocation.getCurrentPosition在iOS上失败

时间:2018-09-30 20:26:00

标签: javascript ios safari geolocation

这适用于Safari上的Mac OS X,以及ChromeMac OS X上的Android。 但是它在Safari上的iOS上失败(在iPhone 8iPad上都进行了测试)。

if (navigator.geolocation) {
  alert('geolocation OK');
  navigator.geolocation.getCurrentPosition(function(position) {
    alert('getCurrentPosition OK');
    BaseLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
    initMap();
  });
}

我收到警报geolocation OK,但是第二个getCurrentPosition OK没有显示在iOS上,并且从未调用过initMap

如何调试,我没有USB电缆连接我的iPhoneiPad

1 个答案:

答案 0 :(得分:0)

我知道这是一篇旧帖子,但我们在 iOS Safari 的 navigator.geolocation.getCurrentPosition() 模式下使用 standalone 时遇到了一些重大问题。

我发布了一个更全面的答案 here,但我们最终代码的一般要点是:

export function getUserPosition(): Promise<GeolocationPosition> {
  const promiseArray = [];

  if (navigator.standalone) {
    promiseArray.push(
      new Promise((resolve, reject) => {
        const wait = setTimeout(() => {
          clearTimeout(wait);
          reject('Location has timed out');
        }, 4000);
      })
    );
  }

  const getCurrentPositionPromise = new Promise((resolve, reject) => {
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(resolve, reject, {
        timeout: 5000,
        maximumAge: 2000,
        enableHighAccuracy: true,
      });
    } else {
      reject(new Error('Browser does not support geolocation!'));
    }
  });

  promiseArray.push(getCurrentPositionPromise);

  return Promise.race(promiseArray) as Promise<GeolocationPosition>;
}