2010-12-07 6 views
5

(edited eine bessere Beschreibung der Antwort zu geben, gab ich) zu handelnein WebView Erste genau wie Safari

ich einen sehr einfachen Browser in Interface erstellt haben von einer Navigationsleiste und eine Webansicht aus.

Alles funktioniert gut, außer wenn ich versuche, zwischen Eingabefeldern Tab ist die Webansicht, der Fokus geht auf die Navigationsleiste.

Ich gehe davon aus, dass ich etwas mit der Responder-Kette tun muss, aber ich konnte nicht herausfinden, was.

Irgendwelche Ratschläge?

Danke, Kelly

+0

Ein paar Dinge müssen hier hinzugefügt werden. Für die meisten Webseiten hat das Setzen des initialFirstResponders des Fensters auf die Webansicht mein Problem behoben. Allerdings hatte ich immer noch seltsame Probleme bei der Verwendung meines Javascript-Frameworks (Cappuccino). Soweit ich das beurteilen kann, senden die meisten Webbrowser ein keydown dom-Ereignis mit einem keyCode von 9 und einem charCode von 0, wenn Sie die Tabulatortaste drücken.Die Webansicht sendet ein Keydown-Dom-Ereignis, bei dem sowohl keyCode als auch charCode auf 9 gesetzt sind, was das Framework verwirrte. Wenn ich herausfinde, wie ich das beheben kann, werde ich zurück posten. –

Antwort

12

Es gibt wohl niemand sonst auf der Welt, die über diese Sorgen, aber ich werde es, falls jemand dies irgendwann muss beantworten.

Wie ich in den Kommentaren erwähnt habe, verwende ich den Cappuccino-Rahmen und ich hatte tatsächlich 3 verschiedene Probleme.

Lassen Sie mich Ihnen die Einrichtung hier geben.

Ich habe eine Kakao-App mit eingebettetem WebView erstellt und eine Seite mit einer Cappuccino-App darin geladen. Zunächst funktionierte das Tabbing zwischen Feldern auf keiner Seite für irgendeine Form.

  1. Wie ich in den Kommentaren gesagt, wenn Sie IB verwenden, können Sie die Fenster ‚initialFirstResponder‘ gesetzt die Webansicht zu sein, und zumindest ‚normalen‘ Formulare korrekt funktionieren. Cappuccino noch nicht.
  2. Zweitens war das Problem, wo KeyCode und CharCode im Dom-Ereignis von WebView in Kakao zu Safari unterschied. Es stellt sich heraus, dass es etwas gibt, das man "Keyboard-Macken" nennt. Wenn Sie nach _needsKeyboardEventDisambiguationQuirks in der WebView ObjC Klasse Quelle suchen, werden Sie sehen, dass es eine Ausnahme für Safari macht und es ausschaltet. Es soll es für ältere Versionen von WebKit deaktivieren, tut es aber nicht. siehe webkit bug 32694 Um das zu lösen, musste ich zwei verschiedene Dinge tun. a) Überschreiben _needsKeyboardEventDisambiguationQuirks, so dass es keine zurückgibt b) Wenn das WebView bereits instanziiert wird, wenn Sie diese Methode überschreiben, müssen Sie auch [[webviewinstance preferences] _postPreferencesChangesNotification] aufrufen, um es zum Funktionieren zu bringen. Dadurch sendet Ihr WebView die DOM-Ereignisse wie Safari.

  3. Schließlich betrachtete Cappuccino die User-Agent-Zeichenfolge, um zu bestimmen, wie mit einigen Dingen umzugehen ist. Es wurde nach WebKit und nach Safari gesucht. Ich habe die Safari-User-Agent-Zeichenfolge ausgewertet und diese als benutzerdefinierten User-Agent-String für das WebView festgelegt.

    [mywebviewinstance setCustomUserAgent: @"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-us) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4"] 
    

Schließlich funktionierte alles so, wie es in Safari tat.

Hoffe das hilft jemandem!