【问题标题】:Navigator.vibrate() is not working in laptopNavigator.vibrate() 在笔记本电脑上不起作用
【发布时间】:2026-02-19 19:25:01
【问题描述】:

我正在尝试使用window.navigator.vibrate(200); 在我的笔记本电脑上实现振动。 我在浏览器控制台中得到true,但是我的笔记本电脑没有振动。 如果它不振动,它应该是 false。 是否有任何功能可以在笔记本电脑上实现振动?

【问题讨论】:

  • 如果您提供的参数无效navigator.vibrate() 返回 false,如果设备没有振动功能则不会。在后一种情况下,它根本没有任何效果,但如果给出正确的参数,它仍然会返回true
  • 是否可以使用window.navigator.vibrate(200);振动到笔记本电脑?
  • @VLAZ 哦,愚蠢的我,它写在 MDN 文档页的开头。 :) 不知道 Firefox 是如何做到这一点的,但 Chrome 实际上似乎并不关心参数。
  • 已确认,Firefox 返回truenavigator.vibrate(-1)navigator.vibrate(NaN)

标签: javascript navigation frontend web-deployment vibration


【解决方案1】:

这实际上是一个很好的调查领域,因为MDN docpage 在这个主题上相当模糊。我的意思是,在没有实际说明什么是无效参数的情况下谈论“方法由于参数无效而无法振动” - 这些天 MDN 正常吗?

the standard itself可能会给出答案:

如果运行步骤的结果确定可见性状态 [PAGE-VISIBILITY-2] 不可见,则返回 false 并终止 这些步骤。

除非实施团队(确保他们开发的浏览器遵循标准)有真正的创意,否则他们只支持这种情况。


是否有任何功能可以在笔记本电脑上实现振动?

如果没有硬件手段,我认为在笔记本电脑上实现振动是不可能的。但如果它有一些,它应该可以通过类似于android.permission.VIBRATE 权限的东西来控制——默认设置为 false。如果任何页面都可以让我的笔记本电脑进入 Harlem Shake 模式,那可不是一个好主意。

【讨论】:

  • "实际上没有告诉什么是无效参数" 鉴于该方法需要一个数字(表示毫秒)或一个数字数组,我认为它不是真的需要提供无效参数的详尽列表,因为它应该是隐式的:负数、非数或包含负数或非数的数组。我很确定这是 MDN 上大多数文档的风格——它告诉你什么是 valid 并且可能会提到如果它无效会发生什么,但不一定需要枚举所有无效输入。跨度>
  • @VLAZ 我可以将无效描述为无效的东西;问题是,它也没有给出。是的,我们可以猜测“每个值表示交替振动或暂停的毫秒数”很可能意味着该数字应该是非负整数 - 但它从未明确写下。无论如何,这是错误的 - 只需运行 Firefox 来检查; navigator.vibrate(-1) 和 navigator.vibrate(NaN) 返回 true 就好了。
  • 给出的示例代码怎么样?此外,如果该值表示毫秒,为什么提供负数或其他任何内容是有效的?这与setTimeout 不同,其中最小延迟上限为 40 毫秒。即便如此,MDN does not specify that the delay must not be negative。它确实规定了上限,但没有描述什么是无效,也没有明确说明什么是有效。由于参数是毫秒,所以也不需要。
  • 老实说,我不确定我是否理解当文档不详细时的一个示例如何为另一个此类案例提供很好的辩护。 ) 至于示例,我基本上将它们视为单元测试 - 我非常怀疑在这种特殊情况下,我们甚至接近可怕的 80% 限制。
  • 澄清一下:是的,好的文档并不意味着完美,它通常意味着足够好。如果是这种情况,我认为我们不会进行这样的讨论。