Получение WebView, чтобы действовать точно так же, как Safari - PullRequest
5 голосов
/ 07 декабря 2010

(отредактировано, чтобы дать лучшее описание ответа, который я дал)

Я создал очень простой браузер в InterfaceBuilder, состоящий из панели навигации и веб-просмотра.

Все работает нормально, за исключением случаев, когда я пытаюсь переключаться между полями ввода в веб-представлении, фокус переходит на панель навигации.

Я предполагаю, что мне нужно что-то сделать с цепочкой респондента, но я не смог выяснить, что.

Любой совет?

Спасибо, Келли

1 Ответ

12 голосов
/ 09 января 2011

Вероятно, в мире нет никого, кто бы беспокоился об этом, но я собираюсь ответить на него, если кому-то понадобится это в какой-то момент.

Как я уже упоминал в комментариях, я использую фреймворк для капучино, и у меня на самом деле были 3 разные проблемы.

Позвольте мне дать вам настройки здесь.

Я создавал приложение для какао со встроенным WebView и загружал страницу с приложением для капучино. Поначалу вкладка между полями не работала ни для какой формы на любой веб-странице.

  1. Как я уже говорил в комментариях, если вы используете IB, вы можете установить windows 'initialFirstResponder' в качестве веб-просмотра, и по крайней мере «нормальные» формы будут работать правильно. Капучино до сих пор не сделал.
  2. Вторая проблема заключалась в том, что keyCode и charCode в событии dom отличались от WebView в какао для Safari. Оказывается, есть что-то, что называется режимом «клавиатурных изысков». Если вы ищете _needsKeyboardEventDisambiguationQuirks в WebView Источник класса ObjC вы увидите, что это делает исключение для сафари, отключая его. Предполагается отключить его для более старых версий WebKit, но это не так. см. ошибка webkit 32694 Чтобы решить эту проблему, мне пришлось сделать две разные вещи. а) переопределить _needsKeyboardEventDisambiguationQuirks так, чтобы он возвращал НЕТ b) если WebView уже создан при переопределении этого метода, вам также потребуется вызвать [[webviewinstance preferences] _postPreferencesChangesNotification], чтобы заставить его работать. После этого WebView отправляет DOM-события, такие как Safari.

  3. Наконец, капучино просматривал строку агента пользователя, чтобы определить, как обрабатывать некоторые вещи. Он проверял наличие WebKit и Safari. Я набрал строку пользовательского агента safari и установил ее в качестве пользовательской строки пользовательского агента для 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"]
    

Наконец, все заработало так же, как в сафари.

Надеюсь, это кому-нибудь поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...