【问题标题】:WebView error sound when typing (Swift, Cocoa)键入时出现 WebView 错误声音(Swift、Cocoa)
【发布时间】:2017-07-23 11:34:21
【问题描述】:

我最近制作了一个简单的 macOS 应用程序,它从 WebKit WebView(新的,不是旧版)中的捆绑包中加载一个 html 页面,但我注意到当我在页面中键入一些键(不是在输入框中,我的意思是 body keypress 使用 javascript 处理)会播放错误声音。我想知道这个问题是否有解决方案。

我也可能会说,如果我用 Safari 打开 html 页面,并且在内置检查器控制台中没有错误并且没有播放错误声音(这可能说明我们认为问题来自我在应用程序中缺少的东西)。

这是我的 Swift 代码(显然是 App Delegate):

@IBOutlet weak var contentView: WebView!

func applicationDidFinishLaunching(_ aNotification: Notification) {

    let path = Bundle.main.path(forResource: "index", ofType: "html", inDirectory: "HTML_Content")
    let url = URL(fileURLWithPath: path!)
    let request = URLRequest(url: url)
    contentView.mainFrame.load(request)

}

我的 HTML 代码(完美运行)[index.html]:

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript" src="js/jquery-1.12.0.js"></script>
        <script type="text/javascript" src="js/main.js"></script>
    </head>
    <body>
        <h2 id="text"></h2>
    </body>
</html>

我的 JavaScript / jQuery 代码 [js/main.js]:

$(document).keypress(function(e) {

        var text = $('#text').text();

        if (e.which == 8) {
            if (text.length != 0) {
                text = text.slice(0, -1);
                $('#text').text(text);
            }
        } else if ('abcdefghijklmnopqrstuvwxyz1234567890 '.indexOf(
                    String.fromCharCode(e.which).toLowerCase()) != -1) {

            $('#text').text(text + String.fromCharCode(e.which));

        }

});

有人可以帮我解决吗?

【问题讨论】:

  • 你能分享你的 HTML 吗?
  • @paulvs 添加了 HTML、JS

标签: html swift cocoa webview


【解决方案1】:

我终于明白为什么应用程序给我错误声音了:

WebView 需要对其内容执行等效键

默认情况下它实际上无法执行它,但我强制它使用具有此覆盖的自定义类,不包括快捷键(否则我将无法使用它们):

斯威夫特 4:

import WebKit

class WebViewController: WebView {

    override func draw(_ dirtyRect: NSRect) {
        super.draw(dirtyRect)

        // Drawing code here.
    }

    override func performKeyEquivalent(with event: NSEvent) -> Bool {
        if event.modifierFlags.contains(.command) ||
           event.modifierFlags.contains(.control) ||
           event.modifierFlags.contains(.shift)   ||
           event.modifierFlags.contains(.option)  {
            return false
        }
        return true
    }

}

然后我使用元素检查器的自定义类属性将自定义类连接到 xib 元素

最后,声音消失了。

【讨论】:

    猜你喜欢
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多