首页 文章

在Safari中打开链接而不是UIWebVIew?

提问于
浏览
27

我在 UIViewController 内有一个 UIWebView 的应用程序 . 我从Web服务加载HTML作为字符串,如下所示:

self.webView loadHTMLString:_string baseURL:nil

是否可以在浏览器中打开此字符串中的HTML链接,而不是在我的应用程序中的UIWebView中打开?我怎样才能做到这一点?

我在UIViewController中试过这个“托管”UIWebVIew:

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

它似乎没有工作......

有任何想法吗?

7 回答

  • 1

    您是否已将 UIWebView 的代表设置为 UIViewController ? 's nothing obviously wrong with your code as far as I can see, so it'可能是那么小的东西 .

  • 0

    在课堂上添加..

    @interface yourViewController : UIViewController
    <UIWebViewDelegate>
    

    在View did load中添加它

    - (void)viewDidLoad
    {
        [description loadHTMLString:string baseURL:nil];
            description.delegate = self;
    }
    

    在.m文件中添加此项

    -(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
        if ( inType == UIWebViewNavigationTypeLinkClicked ) {
            [[UIApplication sharedApplication] openURL:[inRequest URL]];
            return NO;
        }
    
        return YES;
    }
    

    注意:

    UIWebView *description;
    @synthesize description;
    

    然后它将完美地以你应得的方式工作.. !! :)

  • -3

    在此之后使用此UIWebview方法将UIWebView的 delegate 设置为 UIViewController 并检查条件,例如现在webview当前url是google.com,如果假设您单击了gmail,则url包含带有gmail的字符串 . 使用下面的方法打开一个safari浏览器并自动加载该url .

    -(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
        if ( inType == UIWebViewNavigationTypeLinkClicked ) {
            NSURL *url = [inRequest URL];
            if ([[url absoluteString] rangeOfString:@"gmail"].location == NSNotFound) {
                [[UIApplication sharedApplication] openURL:[inRequest URL]];
                return NO;
            }
        }
        return YES;
    }
    
  • 23

    如果你已经正确设置了UIWebViewDelegate,那就干脆做了

    self.webView loadHTMLString:_string baseURL:nil
    self.webView.delegate = self;
    

    应该管用

  • 21

    添加此行(self.webview.delegate = self;)

    例如viewController.m中的示例

    NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
    NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil];
    [self.webview loadHTMLString:htmlString baseURL:nil];
    self.webview.delegate = self;
    
  • 0

    Apple在iOS 9上引入了Safari View Controller.Safari View Controller将用户期望从Safari获得的所有功能带到您的应用程序,而无需离开它 .

    首先,我们需要导入Safari服务

    #import <SafariServices/SafariServices.h>
    

    对于目标C: -

    NSString *yourUrl = @"http://yourURL";
    SFSafariViewController *svc= [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString: yourUrl]];
    [self presentViewController:svc animated:YES completion:nil];
    

    对于斯威夫特: -

    let svc = SFSafariViewController(URL: NSURL(string: self.urlString)!)
    self.presentViewController(svc, animated: true, completion: nil)
    
  • 0

    是的,在你的超链接标签中添加

    target="blank"
    

    一个问号就可以了,谢谢

相关问题