Samsung Galaxy Tab上缺少DeviceMotionEvent和DeviceOrientationEvent

时间:2019-08-08 12:20:40

标签: javascript android google-chrome sensors

以下是我的Samsung Galaxy Tab的用户代理

  

Mozilla / 5.0(Linux; Android 8.1.0; SM-T580 Build / M1AJQ; wv)   AppleWebKit / 537.36(KHTML,如Gecko)版本/4.0    Chrome / 76.0.3809.89 Safari / 537.36

请注意,截至今天(2019年8月8日),这是chrome的最新版本。作为参考,这里是我的Pixel 3用户代理:

  

Mozilla / 5.0(Linux; Android 9; Pixel 3)AppleWebKit / 537.36(KHTML,   像Gecko) Chrome / 76.0.3809.89 移动Safari / 537.36

两者都具有相同的Chrome版本。

在平板电脑上检查window.DeviceOrientationEvent时,我得到undefined和像素电话ƒ DeviceOrientationEvent() { [native code] }上的信息。

这个事实导致我的定向侦听器在平板电脑上失败。

window.addEventListener('deviceorientation', (event) => {
    console.log(event);
});

如果Chrome版本相同,那怎么办? 是否有三星的“禁用机制”作为默认行为,或者可能是错误?

您的猜测是什么?

1 个答案:

答案 0 :(得分:0)

实际上,了解为什么会发生这可能很有趣。 我的智能手机Galaxy S10遇到相同的问题。 用户代理就是这个:

用户代理:Mozilla / 5.0(Linux; Android 10; SM-G973F)AppleWebKit / 537.36(KHTML,例如Gecko) Chrome / 80.0.3987.119 移动版Safari / 537.36

当我看到浏览器兼容性表here时,我不明白为什么手机无法触发此事件。

这里有什么帮助(您可能已经尝试过此操作)是用orientationchange事件代替此事件,该事件使您也可以注意设备的方向。

您有一个简短的文档here

我为测试做了一个例子,很高兴与大家分享,这里是您:

<!DOCTYPE html>
<html>
<head>
    <title>Orientation - Screen Mode</title>
    <meta name="viewport" content="width=device-width, user-scalable=no">
</head>
<body>
    <span id="mode" />
    <script>
    (function() {
        var mode = document.getElementById('mode');
        function modeFrom(orientationAngle) {
            return orientationAngle !== 0? 'landscape': 'portrait';
        }
        function setInfosFrom(o, value) {
            value = 'Non compatible browser!';
            if (o !== undefined) {
                value = modeFrom(o) + " (angle " + o + "&deg;)";
            }
            mode.innerHTML = value;
        }
        function setInfos() {
            setInfosFrom(window.orientation);
        }
        setInfos();
        window.addEventListener('orientationchange', setInfos, false);
    }());
    </script>
</body>
</html>

希望它对您或其他读者有帮助! :)

祝你有美好的一天!