美文网首页
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