美文网首页
ios motion orientation access

ios motion orientation access

作者: aaagu1234 | 来源:发表于2020-04-02 18:24 被阅读0次

目前苹果的 ios13.3.0 以上的系统(经过测试不是那么严谨有的相同的版本还有能用不能用的问题),对于deviceorientation 事件无法触发,需要权限才可以触发。
代码如下:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no">
    <title>
      motion orientation access
    </title>
  </head>
  <body>
    <button onclick="testClick()">
      deviceorientation
    </button>
    <script type="text/javascript">
      // 判断是否是 ios 设备    
      function getIos() {
        var u = window.navigator.userAgent;
        return !! u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
      }

      function requestPermissionsIOS() {
        requestDeviceMotionIOS();
        requestDeviceOrientationIOS();
      }

      function requestDeviceMotionIOS() {
        
        if (typeof(DeviceMotionEvent).requestPermission === 'function') { 
          (DeviceMotionEvent).requestPermission().then(permissionState =>{

            if (permissionState === 'granted') {
              window.addEventListener('devicemotion', () =>{

              });
            }
          }).
          catch((err) =>{
            alert(JSON.stringify(err)) alert("用户未允许权限");
          })
        } else {
          // handle regular non iOS 13+ devices
        }
      }

      // requesting device orientation permission
      function requestDeviceOrientationIOS() {

        if (typeof(DeviceOrientationEvent).requestPermission === 'function') { (DeviceOrientationEvent).requestPermission().then(permissionState =>{
            if (permissionState === 'granted') {
              window.addEventListener('deviceorientation', () =>{

             });
            }
          }).
          catch((err) =>{
            alert(JSON.stringify(err)) alert("用户未允许权限");
          })
        } else {
          // handle regular non iOS 13+ devices
        }
      }
      function testClick() {
        requestPermissionsIOS();
      }
    </script>
  </body>

</html>

重点说明:

  1. 需要https的链接。
  2. 需要人为手动点击button按钮触发弹出授权弹窗,或者body onclick事件触发。目前测试 touchstart 是不行的。
  3. 微信打开的链接点击了取消,需要杀死微信,重新进去,刷新页面就可以再次弹出授权弹窗。清除缓存测试是不行的。无法弹出授权弹窗。
  4. safari 每次取消了需要清楚缓存才可以弹出。
  5. 只需要授权一次就可以了。

相关文章

网友评论

      本文标题:ios motion orientation access

      本文链接:https://www.haomeiwen.com/subject/qhqfphtx.html