Какао WebKit / WebView делегат для изменения местоположения? (Пользователь щелкнул ссылку, действие JavaScript и т. Д.) - PullRequest
6 голосов
/ 15 октября 2011

Я добавил WebView в приложение Cocoa и пытаюсь выяснить, какой делегат я могу использовать для обнаружения изменений навигации (пользователь нажимает на ссылку или запускает JavaScript, чтобы изменить местоположение и т. Д.).

Ссылка на класс WebView содержит четыре делегата (Ссылка на протокол WebFrameLoadDelegate, Ссылка на протокол WebPolicyDelegate, Ссылка на протокол WebResourceLoadDelegate и Ссылка на протокол WebUIDelegate), и я рассмотрел каждый из них, но не могу найти, как найти обнаружить это. Я что-то упускаю явно очевидное или нет способа получить это?

tldr - Попытка выяснить, как я могу установить делегата для получения события, когда WebView меняет URL. (В частности, мне нужно знать, что такое новый URL).

Ответы [ 3 ]

9 голосов
/ 18 октября 2011

При использовании WebKit (т. Е. MacOS X), вероятно, лучшее место для отслеживания запросов - это webView:identifierForInitialRequest:fromDataSource:, хотя webView:resource:willSendRequest:redirectResponse:fromDataSource: также хорош и дает вам возможность изменить запрос.

Как и в случае с iOS, вы можете использовать [request URL].

Установите это значение с помощью [webView setResourceLoadDelegate:self];.

Делегат загрузки ресурса (как указано выше) дает лучшие варианты для обработкизапрос, на мой взгляд, чем методы делегата политики.

5 голосов
/ 19 октября 2011

Я рекомендую вам реализовать эти два WebPolicyDelegate метода:

-webView:decidePolicyForNavigationAction:request:frame:decisionListener:
-webView:decidePolicyForNewWindowAction:request:newFrameName:decisionListener:

Это сообщит вам новый URL-адрес, на который вы переходите, но также даст вам возможность изменить поведение по умолчанию. например Вы не можете WebKit пытаться открыть новые окна.

0 голосов
/ 17 октября 2011

Реализация

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    return YES;
}

и проверьте тип навигации в теле. Ваш класс должен быть установлен в качестве делегата веб-представления и реализовывать протокол UIWebViewDelegate. URL можно получить по запросу:

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