У меня есть часть моего приложения, написанного на JS и работающего внутри WebView. Я использую метод UIWebView shouldStartLoadWithRequest для захвата HTTP-запросов как средства связи между JS и obj-c. Это отлично работает, пока я не попытаюсь загрузить контроллер модального представления через веб-просмотр изнутри метода shouldStartLoadWithRequest. Как только это произойдет, shouldStartLoadWithRequest больше не вызывается. Иногда мне нужно отклонить этот модальный контроллер представления и вернуться к веб-просмотру и сделать некоторые вещи, а затем повторно представить модальный контроллер. Модальный контроллер появляется в первый раз нормально, затем я отклоняю его и пытаюсь представить его снова, перейдя по URL-адресу из javascript, и он больше не будет отображаться. NSLogs внутри shouldStartLoadWithRequest никогда не запускаются.
В моем javascript я делаю что-то вроде этого:
window.location='myapp:whateverMethod';
Целевой код c выглядит так:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSString *requestString = [[request URL] absoluteString];
NSLog(@"REQUEST URL: %@", requestString);
if([requestString hasPrefix:@"myapp:"]) {
NSArray *components = [requestString componentsSeparatedByString:@":"];
NSString *function = [components objectAtIndex:1];
if([self respondsToSelector:NSSelectorFromString(function)]) {
[self performSelector:NSSelectorFromString(function)];
}
return NO;
}
return YES;
}
-(void) whateverMethod {
NSLog(@"whateverMethod called!");
// This is a quick way to grab my view controller from the storyboard, so assume it exists
UIViewController *splash = [self.storyboard instantiateViewControllerWithIdentifier:@"splashViewController"];
[self presentModalViewController:splash animated:NO];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
[self dismissModalViewController:splash animated:NO];
});
}
На данный момент мой веб-просмотр все еще виден. Я перехожу со страницы на страницу в своем веб-приложении, и весь javascript отлично работает в нем, но метод делегата «shouldStartLoadWithRequest» веб-просмотра больше не вызывается. Я не могу понять почему. У кого-нибудь есть идеи?