未定义不是对象(评估“navigator.permissions.query”)

Tsa*_*ary 3 javascript iphone permissions ios reactjs

当我尝试在带有白色银行屏幕的 iPhone 7 上访问我的网站时,出现此错误(主屏幕加载正常,但在单击某些内容后,我在网络屏幕上出现此错误)。

我想这就是它正在谈论的内容:

  useEffect(() => {
    navigator.permissions
      .query({ name: "microphone" })
      .then((permissionStatus) => {
        setMicrophonePermissionGranted(permissionStatus.state === "granted");

        permissionStatus.onchange = function () {
          setMicrophonePermissionGranted(this.state === "granted");
        };
      });

    navigator.permissions.query({ name: "camera" }).then((permissionStatus) => {
      setCameraPermissionGranted(permissionStatus.state === "granted");

      permissionStatus.onchange = function () {
        setCameraPermissionGranted(this.state === "granted");
      };
    });
  }, []);
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

com*_*tos 6

您需要检查权限 API 的可用性,如果不可用,则查询标准 API。

以下是位置示例: 权限 API 导航 API

if ( navigator.permissions && navigator.permissions.query) {
//try permissions APIs first
  navigator.permissions.query({ name: 'geolocation' }).then(function(result) {
      // Will return ['granted', 'prompt', 'denied']
      const permission = result.state;
      if ( permission === 'granted' || permission === 'prompt' ) {
          _onGetCurrentLocation();
      }
  });
} else if (navigator.geolocation) {
//then Navigation APIs
  _onGetCurrentLocation();
}

function _onGetCurrentLocation () {
    navigator.geolocation.getCurrentPosition(function(position) {
        //imitate map latlng construct
        const marker = { 
          lat: position.coords.latitude, 
          lng: position.coords.longitude 
        };
    })
}
Run Code Online (Sandbox Code Playgroud)