2012-02-08 6 views
1

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

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

Я реализовал webView: solvePolicyForNavigationAction: request: frame: decisionListener, и я могу видеть все запросы, сделанные во время загрузки страницы. Оба запроса, вызванные пользователем, а также те, что были вызваны Javascript, REST-вызовами, такие вещи.

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

Кто-нибудь другой справился с этим? Любые указатели? Благодаря!

ответ

0

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

BOOL isUserAction = (
    [frame isEqual:[sender mainFrame]] && 
    [[request URL] isEqualTo:[actionInformation objectForKey:WebActionOriginalURLKey]] 
); 
Смежные вопросы