如何在UIWebView的新窗口中打开第三方URL



我在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;
}

一切正常,但在我的网站上,我有来自 stripe 的 javascript,它下载具有内容类型text/html的脚本https://js.stripe.com/v2/channel.html?stripe_xdm_e=,因此该脚本在新窗口中打开。我已经用checkURL方法进行了黑客攻击。但是,如果我有像 Stripe 这样的新脚本呢?我尝试检查navigationType但对于此链接,它返回UIWebViewNavigationTypeLinkClicked。我怎样才能解决这个问题?

UIWebview "shouldStartLoadWithRequest" 有一个委托方法,它有一个参数 Request。从此请求中,我们可以轻松获取它将要打开的URL。然后,一旦你有了网址,你就可以呈现一个UIViewcontroller,它将有一个UIWebview,并将加载该网址。然后从取消按钮,我们可以在完成时对此视图控制器进行关闭调用。希望这可能会有所帮助。

最新更新