在 keydown 上禁用 WKWebView “funk”声音,但允许输入输入字段

Posted

技术标签:

【中文标题】在 keydown 上禁用 WKWebView “funk”声音,但允许输入输入字段【英文标题】:Disable WKWebView "funk" sound on keydown but allow typing input fields 【发布时间】:2020-04-22 19:37:40 【问题描述】:

我的应用程序中有一个 WKWebView,其中包含输入元素和文本区域。它还支持一些按键事件,比如 A B C。当我按下这些键而不聚焦输入元素时,我可以听到 macOS 的放克系统声音——WebApp 也会通过按键触发命令。

当我尝试在 Swift 中使用 localMonitor 禁用放克声音并“捕捉”这些键上的按键时,它们不再“放克”,但在输入字段或文本区域时它们也不起作用。所以他们完全被禁用了。

我怎样才能防止放克声音(可能完全适用于所有按键),同时在我的网页视图中使用这些按键(所有按键)?

这是我测试过的:

   override func viewDidLoad() 
      super.viewDidLoad()
      // ...
      NSEvent.addLocalMonitorForEvents(matching: .keyDown) 
         if self. keyDownPressed(with: $0) 
            return nil
          else 
            return $0
         
      
   


    func keyDownPressed(with event: NSEvent) -> Bool 

        print("caught a key down: \(event.keyCode)")

        if event.keyCode == 48  return true 
        if event.keyCode == 34  return true 
        if event.keyCode == 38  return true 
        if event.keyCode == 40  return true 
        if event.keyCode == 4  return true 
        if event.keyCode == 1  return true 
        if event.keyCode == 3  return true 
        if event.keyCode == 32  return true 

        return false
    

【问题讨论】:

【参考方案1】:

您是否只尝试过普通的keyDown?输入字段应该仍然可以正常工作。

override func keyDown(with event: NSEvent) 
    if [48, 34, 40, 4, 1, 3, 32].contains(event.keyCode) 
        // no funk
     else 
        super.keyDown(with: event)
    

【讨论】:

以上是关于在 keydown 上禁用 WKWebView “funk”声音,但允许输入输入字段的主要内容,如果未能解决你的问题,请参考以下文章

在 WKWebView 上禁用双击滚动

在 wkwebview 上禁用放大/缩小

在 WKWebView 上禁用字体缩放

在 UIWebView/WKWebview 中禁用自动完成

禁用 WKWebView 以打开链接以重定向到我的 iPhone 上安装的应用程序

当用户在 iPad 上的 WKWebView 中点击电话号码时如何禁用弹出窗口?