ios 8 webview在Safari中打开外部链接,除了一个

Posted

技术标签:

【中文标题】ios 8 webview在Safari中打开外部链接,除了一个【英文标题】:ios8 web view open external links in safari except one 【发布时间】:2014-10-02 16:00:49 【问题描述】:

我有一个 UIWebview 从我的服务器加载一些页面。 我想在 Safari 中打开外部链接并使用以下代码:

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType 

if ( inType == UIWebViewNavigationTypeLinkClicked ) 
    [[UIApplication sharedApplication] openURL:[inRequest URL]];
    return NO;


return YES;

完美运行。

现在,从我的网页视图中显示的网页中,我想让用户使用贝宝付款。 paypal 页面在 web 视图中打开,但是当用户点击按钮以使用他的 paypal 帐户登录时,链接会在 Safari 中打开,并且他会收到来自 paypal 的有关会话已过期的警告(当然)。 在添加上述代码之前,paypal 页面在 web 视图中正确显示,用户可以完成支付,然后他被重定向到我的页面以将交易存储在我的数据库中。

那么,我如何在 Safari 中打开除了 paypal 页面之外的所有外部链接? 谢谢!

【问题讨论】:

【参考方案1】:

您应该能够从NSURLRequest 中获取 URL 字符串,然后根据该字符串进行过滤:

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType 
    NSString *pageToVisit = inRequest.URL.absoluteString;

    if ( inType == UIWebViewNavigationTypeLinkClicked && [pageToVisit rangeOfString:@"paypal.com"].location == NSNotFound ) 
        [[UIApplication sharedApplication] openURL:[inRequest URL]];
        return NO;
    

    return YES;

我不熟悉 PayPal 的 URL 结构,所以我只是天真地假设包含“paypal.com”的 URL 是您想要在 Web 视图中打开的 PayPal 链接。根据需要进行调整。

【讨论】:

完美!非常感谢你!仅针对需要此功能的其他所有人,您在字符串之前错过了“@”: rangeOfString:@"paypal.com"

以上是关于ios 8 webview在Safari中打开外部链接,除了一个的主要内容,如果未能解决你的问题,请参考以下文章

XCODE swift - webview 无法打开 ics 链接 - 在 safari 中有效

强制 iOS 应用在 Safari 中打开外部链接

使用safari对webview进行调试

iOS开发Safari调试WebView页面

Phonegap / Cordova ios外部链接iframe无法在safari中打开

iOS Safari浏览器调试WebView