Navigator vibrate 在 ios 浏览器上破解密码

Navigator vibrate break the code on ios browsers

我想在我的页面上使用 navigator.vibrate

这是我的代码:

    var canVibrate = "vibrate" in navigator || "mozVibrate" in navigator;
    if (canVibrate && !("vibrate" in navigator))
    {
        navigator.vibrate = navigator.mozVibrate;
    }

    $(document).on('click', '.answer', function (eve) {
        $this = $(this);

        navigator.vibrate(222);

        // some other code ...

这适用于 Android 设备,但适用于 iOS(我在 Firfox 上测试过,Chrome 和某些 iOS 设备上的 Safari)代码将在这一行被破坏。

这是为什么?

Apple 的移动网络浏览器 does not have support for it

Firefox 和 Chrome for iOS 是 Safari 渲染引擎的包装器。

我们不希望我们的应用在 iOS 台设备上崩溃和无法使用。 但我们真的想在 Android 上或任何可能的地方使用 navigator.vibrate()。 您可以做的一件事是您可以针对浏览器策略创建自己的策略。问“我们可以让 iOS 设备忽略 navigator.vibrate()”吗? 答案是“嗯,是的,你可以通过使用用户代理解析器来做到这一点。” (例如 Faisal Salman 的 UAParser 来检测用户的设备是 iOS 还是 Mac OS 设备。) 在您的代码中,将所有 navigator.vibrate() 调用包装在

等条件内
if(nameOfUsersOS != "iOS" && nameOfUsersOS != "Mac OS") { navigator.vibrate(); }

注意:您必须将 nameOfUsersOS 替换为您自己的变量名。

注意:这只是一种可能的方法。 Apple 的决策者可以而且有时确实会改变主意。这意味着将来他们可以允许良好的振动 API 就像他们最近允许网络语音 API 一样。您必须使用 kotavy 的答案中的解决方案,除非您的政策是 “Apple 用户永远不振动”

Quentin 是正确的,Apple 设备不支持 API。

给定的代码在实际调用该方法时未能检查振动支持。为避免振动功能被捕获为未定义:

const canVibrate = window.navigator.vibrate
if (canVibrate) window.navigator.vibrate(100)