iOS 13 DeviceOrientationEvent.requestPermission:如何强制设备再次询问用户权限

时间:2019-09-24 16:35:17

标签: javascript ios device-orientation

在iOS 13中,Apple引入了API DeviceOrientationEvent.requestPermission。它必须在用户操作(单击,点击或等效操作)时触发。 我的问题是,结果似乎已被缓存,因此,如果用户拒绝许可,我将不再要求访问(通过缓存的值自动实现诺言)。 有什么方法可以迫使设备忘记缓存的值,然后再次询问用户访问定向数据的权限(我的意思是它应该再次显示用户可以允许或拒绝访问的弹出窗口)?

这是相关代码:

if (DeviceOrientationEvent && typeof(DeviceOrientationEvent.requestPermission) === "function") {
    const permissionState = await DeviceOrientationEvent.requestPermission();

    if (permissionState === "granted") {
        // Permission granted    
    } else {
        // Permission denied
    }
}

3 个答案:

答案 0 :(得分:2)

尝试退出Safari并重新启动它。 提示会回来。

答案 1 :(得分:0)

您确定这是一个缓存问题吗?我无法在iOS 13中使用隐身Safari来响应“已授予”权限。我立即收到“被拒绝”的回复-没有提示。

我正在使用以下代码测试结果,但是始终总是被“拒绝”,而没有显示提示事件。 (https://codepen.io/ejarnutowski/pen/WNePqmM

<button onclick="testDeviceOrientation()">Test Device Orientation</button>
function testDeviceOrientation() {
  if (typeof DeviceOrientationEvent !== 'function') {
    return setResult('DeviceOrientationEvent not detected')
  }
  if (typeof DeviceOrientationEvent.requestPermission !== 'function') {
    return setResult('DeviceOrientationEvent.requestPermission not detected')
  }
  DeviceOrientationEvent.requestPermission().then(function(result) {
    return setResult(result);
  });
}

function setResult(result) {
  document.getElementById('result').innerHTML = 'RESULT: ' + result;
}

看起来drawmote.app可以正常工作,但是JS已编译,要花一些时间才能对其逻辑进行逆向工程。

答案 2 :(得分:0)

我在iOS 13 Safari上看到了相同的行为。您需要删除需要许可的特定网站的网站数据。转到设置> Safari>高级>网站数据,查找该网站并删除所有数据。 然后,当您请求许可时,提示应该再次出现。