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)
我想在我的页面上使用 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)