Как идентифицировать инициированный пользователем запрос в Cocoa WebView? - PullRequest
1 голос
/ 09 февраля 2012

У меня есть приложение на основе WebKit.Когда пользователь инициирует действие, открывающее новую страницу (например, щелкая ссылку), я хотел бы перехватить этот URL-адрес и выбрать его для открытия в моем приложении или отправить его в Safari.

В идеале, я бы хотел определить первый запрос в последовательности загрузки или тот, который непосредственно возник в результате действия пользователя.В качестве альтернативы может быть достаточно, если бы я мог идентифицировать изменения URL-адреса верхнего уровня во фрейме с оговоркой, что мне нужно иметь возможность отменить запрос, если я решу вместо этого отослать его в Safari.Я реализовал webView: managePolicyForNavigationAction: request: frame: SolutionListener, и я могу видеть все запросы, сделанные во время загрузки страницы.Как запросы, инициированные пользователем, так и запросы, инициированные Javascript, вызовы REST и тому подобное.

Для простых ссылок я могу получить WebActionNavigationType из информации действия.Но если пользователь щелкает элемент с помощью обработчика Javascript onclick (), который, в свою очередь, переходит на другую страницу, тип навигации будет «Другой» и будет неотличим от всех других запросов Javascript (т. Е. Вторичных вызовов REST, являющихся результатом исходногозапрос).

Кто-нибудь еще занимался этим?Есть указатели?Спасибо!

1 Ответ

0 голосов
/ 08 марта 2012

Я понял, что, кажется, работает для меня. В файле definePolicyForNavigationAction этот тест определит, было ли это действие, инициированное пользователем:

BOOL isUserAction = (
    [frame isEqual:[sender mainFrame]] &&
    [[request URL] isEqualTo:[actionInformation objectForKey:WebActionOriginalURLKey]]
); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...