Подробнее connection:willSendRequest:redirectResponse:
см.
здесь
ОБНОВЛЕНО: извините, я сразу почувствовал, что это приложение для Mac, а не приложение для iPhone. Ограниченный опыт работы с первым; Тем не менее, я считаю, что применимы одни и те же понятия, просто они созданы по-разному.
Глядя на документацию, похоже, что вы хотите webView:resource:willSendRequest:redirectResponse:fromDataSource
(подробности см. здесь ). Вам также необходимо установить webberAppDelegate
s resourceLoadDelegate
на self
.
ОБНОВЛЕНО: хорошо, вот немного подробнее о процессе. Вам нужно немного понять, как протоколы и делегаты работают в Objective-C. Прочитайте этот материал в поддержку следующего.
Протоколы функционируют как интерфейсы в Java или C # или абстрактные функции в C ++. Они в основном форма контракта. Они являются обязательными по умолчанию, но могут быть явно помечены как @optional, что означает, что компилятор не захлебнется, если он не указан. Если вы посмотрите документацию для WebResourceLoadDelegate
, вы увидите, что все методы являются необязательными. Нам нужен только один метод webView:resource:willSendRequest:redirectResponse:fromDataSource
.
Другая часть этого - концепция делегата. Делегаты функционируют как обратные вызовы. Это включает в себя как объект, который будет выполнять логику обратного вызова, так и реализацию логики (то есть реализацию метода из протокола, описанного выше). Это может быть реализовано несколькими способами, но у Какао есть более или менее стандартизированный способ сделать это. Вы должны предоставить реализацию метода, и вам нужно определить, какой объект будет выполнять логику. Обратите внимание, что WebView
имеет несколько различных протоколов делегатов. Принятие всего или части одного из них называется , соответствующим протоколу. Это указано в коде как (я предоставляю скелет вашего класса здесь):
@interface webberAppDelegate : NSObject<WebResourceLoadDelegate> {
WebView* webview;
}
@end
здесь я предполагаю, что вы произошли от NSObject
; замените, какой бы ни был ваш базовый класс. Это позволяет компилятору ожидать, что вы предоставите реализации обязательных методов, а также любые дополнительные методы, которые вам требуются. Он будет жаловаться, если вы не реализуете обязательные методы.
Более важной задачей является установление того, что у ивара Webview
есть делегат, который предоставит реализации для одного или всех методов, объявленных WebResourceLoadDelegate
. У вас есть недвижимость для этого ивара - webview
. Где-то (например, в viewDidLoad - это то, где я бы сделал это в iOS), вы должны объявить:
webview.resourceLoadDelegate = self;
при условии, что вы хотите обработать обратный вызов webberAppDelegate
. Затем в реализации webberAppDelegate
необходимо указать определение метода webView:resource:willSendRequest:redirectResponse:fromDataSource
:
-(NSURLRequest*) webView:(WebView*)webview resource:(id)sender willSendRequest:(NSURLRequest*)request redirectResponse:(NSURLResponse*)redirectresponse fromDataSource:(WebDataSource*)dataSource {
NSLog(@"willSendRequest delegate method called");
}
Если вы реализуете это много, вы должны увидеть оператор log, отображаемый в консоли при запуске приложения. Именно в этом методе вам нужно обрабатывать перенаправление. Как я уже говорил, я не очень разбираюсь в реализации этого протокола. Согласно этому потоку , это может быть протокол WebPolicyDelegate
, который вы хотите. Вовлеченные принципы будут такими же.