如何在UIWebView中打开新窗口中的第三方网址?

时间:2016-03-15 13:11:52

标签: ios objective-c uiwebview

我在UIWebView中打开我的移动网站,但我希望在Safari的新窗口中打开到其他网站的链接。所以我有这样的代码:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

    NSLog(@"*** %@", request.URL.absoluteString);

    if (![self checkURL:request.URL]) {    
        //open external links in Safari
        if ([[UIApplication sharedApplication] canOpenURL:request.URL])
            [[UIApplication sharedApplication] openURL:request.URL];
        return NO;
    }
    return YES;
}

- (BOOL)checkURL:(NSURL *)url {

    NSURLComponents *urlComp = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:YES];

    if ([urlComp.host rangeOfString:@"myprojectsite.ru"].length > 0 ||
        [urlComp.host isEqualToString:@"connect.mail.ru"] ||      //for MailRu registration
        [urlComp.host isEqualToString:@"js.stripe.com"]) {        //prevents opening this link by Safari

        return YES;
    }

    return NO;
}

一切都很好但在我的网站上我有条带的javascripts,它下载脚本https://js.stripe.com/v2/channel.html?stripe_xdm_e=的内容类型text/html,由于它,这个脚本在新窗口中打开。我用checkURL方法制作了黑客。但是如果我有像Stripe这样的新脚本会怎么样呢。我尝试检查navigationType但是对于此链接,它返回UIWebViewNavigationTypeLinkClicked。我怎么能弄清楚这个问题?

1 个答案:

答案 0 :(得分:-1)

UIWebview“shouldStartLoadWithRequest”有一个委托方法,它有一个参数Request。通过此请求,我们可以轻松获取要打开的URL。然后,一旦你有了url,你可以呈现模态的一个UIViewcontroller,其中将包含一个UIWebview并将加载该url。然后从取消按钮我们可以在完成后对这个视图控制器进行解除调用。 希望这可能有所帮助。