导航器振动会破坏ios浏览器上的代码

时间:2019-07-07 22:30:06

标签: javascript vibration

我要在页面上使用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(我在某些iOS设备上已通过Firfox,Chrome和Safari测试)上,代码将在此行中断。

那是为什么?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:-1)

我们不希望我们的应用崩溃并在 iOS 设备上无法使用。 但我们真的想在 Android 或任何可能的地方使用 navigator.vibrate()。 最佳解决方案?我们问“我们如何让 iOS 设备忽略 navigator.vibrate()”? 幸运的是,您可以通过使用用户代理解析器来做到这一点。 我们使用 Faisal Salman 的 UAParser 来检测用户的设备是 iOS 设备还是 Mac OS 设备。 我们将所有 navigator.vibrate() 调用封装在条件中,例如

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

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