Вопрос по программированию на Mac. Как определить URL-адрес перенаправления в WebView? - PullRequest
2 голосов
/ 17 декабря 2010

Это вопрос программирования на MacOS, а не на iOS (iPhone).

У меня есть WebView. Я могу загрузить веб-страницы в WebView и определить эту начальную загрузку по протоколу делегата:

- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id)listener { NSString *urlString = [[request URL] absoluteString];
NSLog(@"%@", urlString); }

Но страница, которую я отправляю, перенаправляется немедленно, и мне нужно увидеть URL, на который она перенаправляет. К сожалению, этот протокол просто не перехватывает перенаправление.

Кто-нибудь знает, как определить URL перенаправления в WebView?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 18 декабря 2010

Метод webView:decidePolicyForNavigationAction: является частью протокола WebPolicyDelegate.Есть два способа сделать это.Если вы хотите знать только, когда происходит перенаправление, вы можете использовать webView:didReceiveServerRedirectForProvisionalLoadForFrame: из WebFrameLoadDelegate Protcol:

- (void)webView:(WebView *)webView didReceiveServerRedirectForProvisionalLoadForFrame:(WebFrame *)frame {
    NSLog(@"%@",[[[[frame provisionalDataSource] request] URL] absoluteString]);
}

Если вы хотите изменить перенаправление, используйте webView:resource:willSendRequest:redirectResponse:fromDataSource: из WebResourceLoadDelegate протокол:

- (NSURLRequest *)webView:(WebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(WebDataSource *)dataSource {
    NSURLRequest *request = redirectResponse;
    //make any changes to and return new request
    return request;
}

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

4 голосов
/ 18 декабря 2010

Ты счастливчик. Я столкнулся с такой же проблемой час назад.

Согласно справочному классу WebView в документации Apple, вы должны установить делегата, который соответствует протоколу webframeloaddelegate.

[webView setFrameLoadDelegate:object];

Тогда в объекте вы должны установить этот метод:

- (void)webView:(WebView *)sender willPerformClientRedirectToURL:(NSURL *)URL delay:(NSTimeInterval)seconds fireDate:(NSDate *)date forFrame:(WebFrame *)frame 

Вот и все!

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