假设你知道“内部”域领先的时候,你可能会迫使所有外部域在Safari中打开:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if (![request.url.absoluteString containsString:@"https://www.yourinternaldomain.com"]) {
[[UIApplication sharedApplication] openURL:[request URL]];
return NO;
}
return YES;
}
更新:
根据您的意见,如果以上是不够的,你可以添加一个UITapGestureRecognizer
检测用户输入:
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGesture:)];
tapGesture.numberOfTouchesRequired = 1;
tapGesture.numberOfTapsRequired = 1;
tapGesture.delegate = self;
[self.webView addGestureRecognizer:tapGesture];
实现委托方法ENS URE水龙头是公认:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
在你方法,然后你可以设置一个临时BOOL
:
-(void)tapGesture:(UITapGestureRecognizer *)tapGesture {
self.userDidTap = YES;
}
然后在随后的-webView:shouldStartLoadWithRequest:navigationType:
方法,你可以检查self.userDidTap
价值并据此采取行动:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if (self.userDidTap) {
[[UIApplication sharedApplication] openURL:[request URL]];
return NO;
}
return YES;
}
我也想过,虽然如此,但在网页视图中加载的URL通过API调用服务的应用程序,并能随时都会有所不同。有没有办法在点击请求时知道应用程序中加载的实际域名,以了解它是否与众不同? – fana
你能存储从API接收作为属性的初始URL,并且该主机(NSURL -host方法)比较所述一个在[请求URL]? –
我想我可以,但加载的webviews的数量是未知的。我打电话给一个API,可以返回一个网址加载到一个网络视图,或许多...所有可能不同的URL ... – fana