在页面之间存储DeviceOrientationEvent和DeviceMotionEvent权限

时间:2019-11-26 12:18:30

标签: javascript permissions

我有一个不错的DeviceMotionEvent请求,该请求全部适用于Safari(或需要许可的其他浏览器),如下所示:

// on click of a button
DeviceMotionEvent.requestPermission()
.then(response => {
    if (response == 'granted') {
        // do my thing
    }
})
.catch(function(error) {
    console.log(error);
    // do my other thing
});

那很好。但是,当用户转到新页面时,他们必须再次请求权限。显然我会再次调用“ requestPermission”,所以他们当然会这样做。

如何确定是否已授予许可?还是按页面(而不是会话/站点)授予权限?

我可以将响应存储在localstorage或其他内容中,但更喜欢以下内容:

DeviceMotionEvent.permissionStatus

还是什么?

3 个答案:

答案 0 :(得分:1)

我认为您唯一的选择是构建单个页面应用程序,并在需要“更改页面”时使用history.pushState()更新浏览器中的位置。

答案 1 :(得分:0)

已编辑: 您可以通过以下两种机制使用Web Storage API

  • sessionStorage
  • localStorage

顾名思义,这两个接口非常适合基于会话的数据,或者即使在关闭连接后仍要保持状态的情况。

答案 2 :(得分:0)

您应该能够使用 devicemotion eventListener 检查是否已授予权限。请记住,您必须按下按钮或类似按钮才能运行 DeviceMotionEvent.requestPermission()

例如

let hasOrientationControls = false;
window.addEventListener("devicemotion", () => {
    hasOrientationControls = true;
});


// then when the button is pressed we can request permissions if we need
onButtonPressed () => {
   if (hasOrientationControls) return;
   else DeviceMotionEvent.requestPermission();
}

我也用过这个

isVRReady = window.DeviceOrientationEvent && "ontouchstart" in window;