Активировать события клавиатуры WebView - PullRequest
3 голосов
/ 19 сентября 2011

У меня есть веб-просмотр внутри простого / простого NSWindow.

Когда я загружаю URL-адрес внутри WebView, например "http://google.com", я не могу взаимодействовать с текстовым полем, выбирая все символы (cmd + a), вырезая / вставляя (cmd + cv) и т. Д.

Как активировать поведение браузера по умолчанию? Мой Mac испускает классический NSBeep () вместо этого.

Я попытался добавить UIDelegate, который вызывает

- (BOOL)webView:(WebView *)webView shouldPerformAction:(SEL)action fromSender:(id)sender`

но действие никогда не вызывается.

1 Ответ

3 голосов
/ 22 июня 2012

Вы должны создать подкласс WebView или любого другого представления в иерархии представлений, где ваш WebView является подпредставлением, и переопределить NSResponder методов NSView; в частности acceptFirstResponder: и canBecomeFirstResponder :. Затем реализуйте keyUp: или keyDown: или любой другой метод события NSResponder, который вас интересует.

Это должно по крайней мере пропустить NSBeep.

Для более глубокого перехвата событий внутри WebView (для вырезания / вставки и т. Д.) Сам WebView также предоставляет несколько методов для переопределения, хотя я думаю, что должны быть предприняты дополнительные шаги для соответствующего перехвата событий. Извините, что здесь расплывчато.

webView: shouldPerformAction: fromSender , о котором вы говорите, не то, что вы ожидаете. Протокол WebUIDelegate говорит, что этот метод «возвращает логическое значение, которое указывает, должно ли быть выполнено действие, отправленное указанным объектом». - Но методы WebUIDelegationProtocol будут только "вызваны в результате обработки JavaScript или другого содержимого подключаемого модуля" . Это означает, что shouldPerformAction: будет вызываться только в том случае, если он инициирован самим веб-сайтом (JS или плагинами), а не в случае события NSResponder.

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