我有一个不错的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
还是什么?
答案 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;