UIWebView,将操作绑定到 href 链接

Posted

技术标签:

【中文标题】UIWebView,将操作绑定到 href 链接【英文标题】:UIWebView, tying an action to a href link 【发布时间】:2012-02-08 17:51:32 【问题描述】:

我们有一个“关于我们的应用程序”弹出框,它是 html 格式的,基本上是弹出框中的 UIWebView。还有一个指向我们网站的 href 链接。问题是如果您单击链接,它只会在弹出窗口中打开我们的网站。有没有办法改变该链接发生的情况,比如打开 Safari 使其在完整的浏览器中,或者至少增加弹出框的大小,因为我们的关于我们的应用程序窗口很小。

【问题讨论】:

【参考方案1】:

是的,this post 为在 Safari 中打开的每个 http、https 和 mailto 调用提供以下代码:

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

    NSURL *requestURL =[ [ request URL ] retain ]; 
    if ( ( [ [ requestURL scheme ] isEqualToString: @"http" ] || [ [ requestURL scheme ] isEqualToString: @"https" ] || [ [ requestURL scheme ] isEqualToString: @"mailto" ]) 
             && ( navigationType == UIWebViewNavigationTypeLinkClicked ) )  
       return ![ [ UIApplication sharedApplication ] openURL: [ requestURL autorelease ] ]; 
     
    [ requestURL release ]; 
    return YES; 

您只能通过从请求中获取 URL 来修改某些 URL。

【讨论】:

【参考方案2】:

我使用此代码通过 UIWebView 打开 URL:

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

    self.curURL = request.URL;

    if ([request.URL.scheme isEqualToString:@"file"])
    
        return YES;
    

    UIActionSheet * actionSheet = [[UIActionSheet alloc] initWithTitle:nil
                                                              delegate:self
                                                     cancelButtonTitle:nil
                                                destructiveButtonTitle:@"Cancel"
                                                     otherButtonTitles:@"Open in Safari", nil];
    [actionSheet showInView:self.view];
    [actionSheet release];

    return NO;



#pragma mark -
#pragma mark Action sheet delegate methods


- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex

    if(buttonIndex == actionSheet.firstOtherButtonIndex + eSafariButtonIndex)
    
        [[UIApplication sharedApplication] openURL:self.curURL];    
    

【讨论】:

【参考方案3】:

你测试过 UIWebView 委托的- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 方法吗?

webview 应该在每次加载另一个框架/页面时询问它的委托,所以如果你点击链接,方法就会被调用。

然后您只需返回NO 并按照您想要的方式处理请求!

【讨论】:

以上是关于UIWebView,将操作绑定到 href 链接的主要内容,如果未能解决你的问题,请参考以下文章

iPad UIWebView 在 href 链接坐标处定位 UIPopoverController 视图

禁用UIWebView中的链接?

关于如何将 APN 的设备令牌链接到注册用户的建议(通过 phonegap 或 UIWebView)

UIWebview 问题并链接到 App Store

UIWebView:链接到包中的文件并设置 baseURL

UIWebView Href 链接空间问题