美文网首页ios 程序猿FamilyiOS程序猿iOS开发
WKWebView的使用及加载html页面对_blank的处理

WKWebView的使用及加载html页面对_blank的处理

作者: 皮特曼 | 来源:发表于2016-12-21 17:46 被阅读2038次

            iOS8 以后,苹果推出了一个新的加载网页显示的框架WebKit,它解决了在UIWebView上加载速度缓慢,占用内存大,优化困难等问题,在性能和稳定性上有了很大的提升,本文主要介绍WkWebView如何加载网页,并处理当html页面超链接里含有_blank时如何调用Safari浏览器打开该地址。

    1.首先导入头文件 

    #import<WebKit/WebKit.h>

    2.初始化及显示

    #define kScreenWidth  [UIScreen mainScreen].bounds.size.width

    #define kScreenHeight [UIScreen mainScreen].bounds.size.height

    @property (nonatomic, strong)WKWebView *webView;

    _webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 20, kScreenWidth, kScreenHeight - 20)];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.163.com"]];

    [self.webView loadRequest:request];

    self.webView.navigationDelegate = self;//该代理可以用来追踪加载过程以及决定是否执行跳转。

    self.webView.UIDelegate = self;

    [self.view addSubview:self.webView];


    3.理解 HTML <a>标签的target属性

    _blank -- 在新窗口中打开链接

    _parent -- 在父窗体中打开链接

    _self -- 在当前窗体打开链接,此为默认值

    _top -- 在当前窗体打开链接,并替换当前的整个窗体(框架页)

    要想在新页面中打开超链接所指向的地址需要实现 - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler 这个代理方法

    //接收到响应后,决定是否跳转

    - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {

    //this URL externally. If we´re doing nothing here, WKWebView will also just do nothing. Maybe this will change in a later stage of the iOS 8 Beta

    参数 WKNavigationAction 中有两个属性:sourceFrame和targetFrame,分别代表这个action的出处和目标,类型是 WKFrameInfo 。WKFrameInfo有一个 mainFrame 的属性,标记frame是在主frame里显示还是新开一个frame显示

    原文链接:http://www.jianshu.com/p/3a75d7348843

    WKFrameInfo *frameInfo = navigationAction.targetFrame;

    BOOL isMainframe =[frameInfo isMainFrame];

    NSLog(@"isMainframe :%d",isMainframe);

    if (!isMainframe) {//打开新页面显示

    NSURL *url = navigationAction.request.URL;

    UIApplication *app = [UIApplication sharedApplication];

    if ([app canOpenURL:url]) {

    [app openURL:url];

    }

    }

    decisionHandler(WKNavigationActionPolicyAllow);

    }


    本文参考链接

    http://www.jianshu.com/p/3a75d7348843

    http://www.brighttj.com/ios/ios-wkwebview-new-features-and-use.html

    http://www.jianshu.com/p/3a75d7348843

    相关文章

      网友评论

        本文标题:WKWebView的使用及加载html页面对_blank的处理

        本文链接:https://www.haomeiwen.com/subject/zqbqvttx.html