2017-07-23 1 views
0

Ich habe vor kurzem eine einfache macOS-Anwendung, die in einem WebKit WebView (die neuen, nicht Vermächtnis) eine HTML-Seite bildet das Bündel lädt aber ich merkte, dass, wenn ich Geben Sie einige Tasten auf der Seite ein (nicht in einem Eingabefeld, ich meine body keypress behandelt mit Javascript) ein Fehler-Sound wird abgespielt. Ich habe mich gefragt, ob es eine Lösung für dieses Problem gibt.WebView Fehler Ton bei der Eingabe (Swift, Cocoa)

Ich könnte auch sagen, dass die HTML-Seite perfekt funktioniert wenn ich es mit Safari öffnen und es gibt keine Fehler in der integrierten Inspektor-Konsole sowie kein Fehler Sound wird gespielt (was könnte uns sagen, dass das Problem kommt mit etwas, das ich in der Anwendung vermisse).

Hier ist mein Swift Code (AppDelegate Offensichtlich):

@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) 

} 

Mein HTML Code (die einwandfrei funktioniert) [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> 

Mein JavaScript/jQuery-Code [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)); 

     } 

}); 

Kann mir jemand helfen, es zu reparieren?

+0

Können Sie Ihren HTML-Code teilen? – paulvs

+0

@paulvs Hinzugefügt HTML, JS – Cristian

Antwort

1

ich endlich verstanden, warum die Anwendung mir den Fehler Ton gab:

Die WebView Bedürfnisse führen den Schlüssel Äquivalent auf ihren Inhalt.

Es könnte tatsächlich es standardmäßig nicht durchführen, aber ich gezwungen, es eine benutzerdefinierte Klasse mit dieser Überschreibung, die Tasten ohne (oder ich würde sie nicht in der Lage sein zu verwenden):

Swift 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 
    } 

} 

Dann verband ich die benutzerdefinierte Klasse zum xib Element des Elements Inspektors benutzerdefinierte Klasse Eigenschaft.

enter image description here

Und am Ende wurde der Ton weg.