2010-12-07 14 views
5

(editado para dar una mejor descripción de la respuesta que di)Conseguir un WebView para actuar exactamente igual que Safari

He creado un navegador muy simple en InterfaceBuilder que consiste en una barra de navegación y una vista web.

Todo funciona bien, excepto cuando trato de tabular entre los campos de entrada es la vista web, el foco va a la barra de navegación.

Supongo que tengo que hacer algo con la cadena de respuesta, pero no he podido averiguar qué.

¿Algún consejo?

Gracias, Kelly

+0

Se deben agregar un par de cosas aquí. Para la mayoría de los sitios web, configurar el initialFirstResponder inicial de la ventana en la vista web solucionó mi problema. Sin embargo, todavía tenía problemas extraños al usar mi marco javascript (cappuccino). Por lo que puedo decir, la mayoría de los navegadores web envían un evento dom 'keydown' con un código clave de 9 y un código de carga de 0 cuando se presiona la tecla de tabulación.La vista web está enviando un evento dom keydown que tiene keyCode y charCode establecido en 9, lo que confundió el marco. Si descubro cómo solucionar esto, volveré a publicar. –

Respuesta

12

Probablemente no hay nadie más en el mundo que se preocupa por esto, pero voy a responder en caso de que alguien necesita esto en algún momento.

Como mencioné en los comentarios, estoy usando el marco cappuccino y en realidad estaba teniendo 3 problemas diferentes.

Déjame darte la configuración aquí.

Estaba creando una aplicación de cacao con un WebView incrustado y cargando una página con una aplicación de cappuccino. Al principio, tabular entre campos no funcionaba para ningún formulario en ninguna página web.

  1. Como ya he dicho en los comentarios, si está utilizando IB, se pueden establecer las ventanas 'initialFirstResponder' a ser la vista web, y por lo menos las formas 'normales' funcionan correctamente. Cappuccino todavía no lo hizo.
  2. En segundo lugar estaba el problema donde keyCode y charCode en el evento dom era diferente de WebView en Cocoa a Safari. Resulta que hay algo llamado modo 'peculiaridades del teclado'. Si busca _needsKeyboardEventDisambiguationQuirks en la fuente de la clase ObjC , verá que hace una excepción para safari y lo desactiva. Se supone que lo apaga para las versiones anteriores de WebKit, pero no es así. ver webkit bug 32694 Para resolver esto, tuve que hacer dos cosas diferentes. a) anula _needsKeyboardEventDisambiguationQuirks para que devuelva NO b) si WebView ya está instanciado cuando anula ese método, también deberá llamar al [[webviewinstance preferences] _postPreferencesChangesNotification] para que funcione. Esto hace que su WebView envíe los eventos DOM como Safari.

  3. Finalmente, el cappuccino estaba mirando la cadena del agente del usuario para determinar cómo manejar algunas cosas. Estaba buscando WebKit y Safari. Comprimí la cadena del agente de usuario de safari y la configuré como una cadena de agente de usuario personalizada para WebView.

    [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"] 
    

Finalmente, todo funcionaba como lo hizo en Safari.

Espero que esto ayude a alguien!

Cuestiones relacionadas