【问题标题】:navigator.geolocation.getCurrentPosition fails on iOSnavigator.geolocation.getCurrentPosition 在 iOS 上失败
【发布时间】:2019-03-06 00:23:02
【问题描述】:

这适用于Mac OS X 上的Safari,以及Mac OS XAndroid 上的Chrome。 但它在iOS 上的Safari 上失败(在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

【问题讨论】:

标签: javascript ios safari geolocation


【解决方案1】:

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

我发布了一个更全面的答案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>;
}

【讨论】:

    猜你喜欢
    • 2013-01-26
    • 1970-01-01
    • 2012-04-01
    • 2017-12-28
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多