【问题标题】:IOS UIWebView : opening links in safariIOS UIWebView:在 safari 中打开链接
【发布时间】:2012-11-08 15:15:46
【问题描述】:

我创建了自定义类,文件是 showBlock.h 和 showBlock.m,用于以编程方式加载 UIWebView,showBlock.m 的实现是

#import "showBlock.h"

@implementation showBlock;

@synthesize mainViewContObj;

- (void) showView {
    UIWebView *aWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
    aWebView.autoresizesSubviews = YES;
    aWebView.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth);
    [aWebView setDelegate:[self mainViewContObj]];
    NSString *urlAddress = @"http://localhost/test/index.php";
    NSURL *url = [NSURL URLWithString:urlAddress];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];

    [aWebView loadRequest:requestObj];

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
    [[[self mainViewContObj] view] addSubview:aWebView];

}
@end

它工作正常,正在加载带有 html 内容的 index.php 文件,但我想在 safari 浏览器中打开这个 html 文件的链接,我需要为此做些什么?

【问题讨论】:

    标签: ios uiwebview


    【解决方案1】:

    需要在ShowBlock.m下面添加委托方法实现

    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
     navigationType:(UIWebViewNavigationType)navigationType {
        // This practically disables web navigation from the webView.
        if (navigationType == UIWebViewNavigationTypeLinkClicked) {
            [[UIApplication sharedApplication] openURL:[request URL]];
            return FALSE;
        }
        return TRUE;
    }
    

    【讨论】:

    • 我需要做额外的事情吗,因为只在 ShowBlock.m 中添加这个方法我的链接仍然在同一帧中打开
    【解决方案2】:

    实现UIWebViewDelegate协议并设置aWebView.delegate = self

    然后实施

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

    点击链接时会调用它。从请求中获取 URL。

    使用下面的代码在 safari 中打开链接:

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString: @\"http://www.google.com"]];
    

    【讨论】:

    • 单靠这个是行不通的。什么会触发此代码?您需要使用 UIWebViewDelegate
    • @EliGregory 已更新。现在描述什么会触发代码。
    【解决方案3】:

    在你的UIWebView委托中,定义webView:shouldStartLoadWithRequest方法:

    - (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
    
        if ([[request URL] checkCondition]) 
           [[UIApplication sharedApplication] openURL:[request URL]];
            return NO;
        }
        return YES;
    
    }
    

    checkCondition 是一种检查 URL 是否应该由 safari 打开的方法(您可以根据域或其他内容进行检查)。在最简单的情况下,始终调用openURL(删除if

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2011-12-01
      • 2016-04-16
      • 2015-12-02
      相关资源
      最近更新 更多