【问题标题】:deviceorientation of javascript event is not firing in chrome androidjavascript 事件的设备方向未在 chrome android 中触发
【发布时间】:2019-09-14 10:01:54
【问题描述】:
  1. 我正在尝试触发 javascript 的 deviceorientation 事件,但我的 android 设备中没有触发该事件。 please check out event documentation here
window.addEventListener('deviceorientation', function(event) {
  console.log(event.alpha + ' : ' + event.beta + ' : ' + event.gamma);
});
  1. 它在 chrome 桌面上运行良好,并且事件被触发。 (谷歌浏览器 -> 检查 -> 自定义和控制 devTools -> 更多工具 -> 传感器 -> 方向(打开并旋转虚拟设备)。

3.但是如果我从任何 android 设备事件中打开此链接都不起作用。我看不到任何控制台日志或警报..是否需要任何额外的设置才能从 android 获取方向详细信息..

感谢任何形式的帮助。

【问题讨论】:

标签: javascript three.js device-orientation


【解决方案1】:

即使您没有安装任何 SSL 证书,您也需要使用 https:// 打开页面。

【讨论】:

【解决方案2】:

目前,我面临同样的问题。在 Chrome 桌面 deviceorientation 事件似乎正在工作,但在 Chrome Android 上却没有。此外,在 FireFox 中,反之亦然。

我不知道为什么。但我可以建议一个非常基本的方法来尝试,另一种方法是让它在 Chrome 上运行,也可以在 FireFox 上运行,包括桌面和 Android。

第一个只是卸载您的 Chrome 浏览器,或者只卸载它的更新,然后重新安装它。它已经修复了我手机上的deviceorientation 问题。

另一种如下:

您可以使用OrientationSensors 之一,即Sensor APIs 中的AbsoluteOrientationSensorRelativeOrientationSensor 来使事情在Chrome Android 上运行,并且仍然保留deviceorientation 方式作为其工作位置的后备,即。 Chrome 桌面和 FireFox Android。如我所见,传感器 API 仅在 Chrome 中可用。这些Sensor APIs 需要在安全上下文中,例如 https 页面等 (https://www.w3.org/TR/secure-contexts/)。我想添加更多关于网络中设备方向测量的绝对性的信息:正如这两个传感器 api 的名称所暗示的那样,一个用于绝对方向,即。相对于地球的真北,另一个是相对的。如果您从浏览器获取absolute 属性true,您也可以通过deviceorientation 事件实现绝对性。如果您的设备理论上没有磁力计,它将是false。此外,移动 Safari 并不关心最后一个属性。哎呀!它还有另一个属性webkitCompassHeading,您可以在Apple DeveloperMDN 中看到它,但在规范本身中没有。同样,在 deviceorientation 事件规范中提到了 Apple Developer 或 MDN compassneedscalibration Eventdeviceorientationabsolute Event 中未提及的两种不同的事情。但我在浏览器的deviceorientation 事件中看不到它们中的任何一个。好像没有身体在乎。

作为个人的补充说明,我认为这不应该那么复杂。只需给我们absolute 道具值truefalse 然后alpha 始终与从真北或磁北的指南针角度相关,无论如何。 Sensor APIs 即将解决这些问题,但尚未实现太多。

结合 Permissions API,你必须使用如下(来自 MDN 示例):

const sensor = new AbsoluteOrientationSensor();
Promise.all([navigator.permissions.query({ name: "accelerometer" }),
             navigator.permissions.query({ name: "magnetometer" }),
             navigator.permissions.query({ name: "gyroscope" })])
       .then(results => {
         if (results.every(result => result.state === "granted")) {
           sensor.start();
           ...
         } else {
           console.log("No permissions to use AbsoluteOrientationSensor.");
         }
   });

此 API 为您提供了一个四元数,它对于方向和旋转非常有用,如果您特别使用 three.js 或 babylonjs 或类似的东西,它非常方便。使用传感器的 onreading 事件处理程序或 reading 事件来获取四元数并使用它来更新您的 场景相机 或 3d 引擎的 渲染循环 中的其他对象的方向选择。

您可以从开发人员工具检查器中检查代码的一些示例(页面下方是 AbsoluteOrientationSensor 示例):

https://sensorbox.glitch.me

上面的其中一个 cmets 建议您必须使用 https 以使 deviceorientation 事件起作用。正如我从这里理解的那样,规范确实如此:https://w3c.github.io/deviceorientation/#security-and-privacy,但据我尝试,它适用于 http 页面。在你的情况下,和我的一样,它不会在 https 页面中工作。

希望它有所帮助,在当前使用传感器进行 Web 开发的最新技术中,这里有点混乱。

【讨论】:

    猜你喜欢
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    相关资源
    最近更新 更多