我要在页面上使用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测试)上,代码将在此行中断。
那是为什么?
答案 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
替换为您自己的变量名称。