Я пытаюсь перенести мой iOS UIWebview в Webkit, но в результате я столкнулся с множеством проблем. У меня есть код в webView:shouldStartLoadWithRequest:navigationType:
, до которого я использовал для мониторинга urls and url-scheem
, как tell:, exit:, refresh:, mailto:
, и чтобы убедиться, что только мой URL может открываться в WebView. Но, пытаясь реализовать тот же самый способ с помощью webkit, это не сработало, пожалуйста, я не уверен, что если я делаю это в методе write, может кто-нибудь мне помочь.
/ Попытка реализовать его с помощью webkit /
- (BOOL)webView:(WKWebView *)inWeb decidePolicyForNavigationAction:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType{
NSLog(@"Event: %@", @"shouldStartLoadWithRequest inType called");
NSArray *schemeArray = @[@"share", @"map", @"rate", @"reload", @"exit"];
NSString *url = [[inRequest URL] query];
NSString *scheme = [[inRequest URL] scheme];
NSString *StrPurl = [NSString stringWithFormat:@"%@",url];
NSLog(@"[inRequest URL] == %@", StrPurl);
NSLog(@"[inRequest NSURL] == %@", url);
NSLog(@"[[inRequest URL] scheme] == %@", scheme);
if ([StrPurl containsString:@"mysite.com"]){
//coninue open
}else if ( [schemeArray containsObject:[[inRequest URL] scheme]] ){
//open share intent
NSLog(@"Event: Share URL %@", [[inRequest URL] scheme]);
}
NSLog(@"Event: Request URL %@", url);
return NO;
}
Используя приведенный выше пример в UIWebview, он работает
- (BOOL)webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType{
if (self.validatedRequest || inType != UIWebViewNavigationTypeLinkClicked){
NSString *url = [[inRequest URL] query];
NSString *scheme = [[inRequest URL] scheme];
NSString *StrPurl = [NSString stringWithFormat:@"%@",url];
NSLog(@"[inRequest URL] == %@", StrPurl);
NSLog(@"[inRequest NSURL] == %@", url);
NSLog(@"[[inRequest URL] scheme] == %@", scheme);
}
}
Также у меня есть этот метод, но он не вызывается, когда я нажимаю на tel: или другой внешний URL
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
NSLog(@"Event: %@", @"shouldStartLoadWithRequest navigationType called");
//if (navigationAction.navigationType == WKNavigationTypeLinkActivated) {
if (navigationAction.navigationType == UIWebViewNavigationTypeLinkClicked) {
}
NSString *url = [navigationAction.request.URL query];
NSLog(@"Event: Request URL %@", url);
decisionHandler(WKNavigationActionPolicyAllow);
}