【问题标题】:DeviceOrientationEvent not working on all serversDeviceOrientationEvent 不适用于所有服务器
【发布时间】:2019-09-05 01:09:23
【问题描述】:

我已经在我的计算机上的虚拟机上安装了 Fedora,当我在手机上查看该网站时,我一直在尝试触发 deviceOrientation 事件。

它一直没有工作,所以使用这个线程的答案:How to check for a device/browser that fully supports the deviceorientation event?,我运行了这段代码来检查它是否受支持:

if (window.DeviceOrientationEvent && 'ontouchstart' in window) {
    // setup real compass thing, with event.alpha
    document.write("haz!");
} else {
    // setup some mouse following hack
    document.write("nope");
}

这导致“不”。但我知道我的手机支持 deviceOrientation,因为 MDN 上的示例有效。

然后,我将完全相同文件上传到我自己的网站,你瞧,它给了我“haz!”。

我不知道为什么我使用的服务器会影响是否支持 deviceOrientation。我唯一能想到的是它可能需要 SSL,但我在任何文档中都没有看到 SSL,而且我之前在我的树莓派上托管的网站上使用了 deviceOrientation,它没有 SSL。

【问题讨论】:

    标签: javascript server device-orientation


    【解决方案1】:

    从 v.76 开始,Chrome 要求您所在的页面通过 https 提供。

    这可以通过转到这个http:// fiddle 来看到,它将输出nope,而同样的小提琴served through https:// 将输出haz!,就像下面的sn-p,它通过https: 提供服务

    if (window.DeviceOrientationEvent) {
        console.log("haz!");
    } else {
        console.log("nope");
    }

    Here is the chromium bug 引入了这个限制。

    请注意,如果它仅用于您自己的目的,那么您可以通过使用 --unsafely-treat-insecure-origin-as-secure 启动 Chrome 来利用它,显然是 it's also possible to do it on mobile versions(尽管我没有测试自己)。

    【讨论】:

    • 非常感谢!我疯了哈哈。知道为什么他们在没有 SSL 的情况下禁用它吗? deviceOrientation 会带来哪些安全风险?
    • 这实际上是按规格推荐的:w3c.github.io/deviceorientation/#security-and-privacy 他们的观点是,这是一种对用户进行指纹识别的绝妙方式,因为两种不同的硬件会产生不同的精度。 (顺便说一句,我找到了引入此更改的 crbug 并将其添加到我的答案中)
    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多