精华内容
参与话题
问答
  • 前两天我写了一套关于JS与OC交互的三种方法的文章,但是发现自己对UIWebView理解的还是比较浅,一直认为只能简单的当一个webView来使用,具体很多细节都忽略,如果想看我之前UIWebView的JS交互,请点击下面的连接 ...


    前两天我写了一套关于JS与OC交互的三种方法的文章,但是发现自己对UIWebView理解的还是比较浅,一直认为只能简单的当一个webView来使用,具体很多细节都忽略,如果想看我之前UIWebView的JS交互,请点击下面的连接

    开始今天的内容吧,事不宜迟

    一、UIWebView的基础使用

    - (void)viewDidLoad {
        [super viewDidLoad];
        //    1、创建UIWebView:
    
        CGRect bouds = [UIScreen mainScreen].bounds;
        UIWebView* webView = [[UIWebView alloc]initWithFrame:bouds];
    
        //    2、加载在线资源http内容
    
        NSURL* url = [NSURL URLWithString:@"http://www.baidu.com"];//创建URL
        NSURLRequest* request = [NSURLRequest requestWithURL:url];//创建
        [webView loadRequest:request];//加载
    
        //    2、 加载本地文件的方法:
    
        /**
         *
         //第一种方法:
    
         NSString* path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];//mobile是根目录,name是文件名称,html是文件类型
         [webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]]]; //加载本地文件
    
    
         //第二种方法:
    
         NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
    
         NSString *filePath = [resourcePath stringByAppendingPathComponent:@"mobile.html"];
    
         NSString *htmlstring=[[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
    
         [webView loadHTMLString:htmlstring baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];
    
         */
    
        //    3、导航
    
        //    UIWebView类内部会管理浏览器的导航动作,通过goForward和goBack方法你可以控制前进与后退动作:
    
        [webView goBack];
        [webView goForward];
    
        //    4、UIWebViewDelegate委托代理
    
        webView.delegate = self;
    
        //    5、显示网页视图UIWebView:
    
        [self.view addSubview:webView];
    }
    
    # pragma mark - UIWebView 的代理方法
    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;//当网页视图被指示载入内容而得到通知。应当返回YES,这样会进行加载
    - (void)webViewDidStartLoad:(UIWebView *)webView { //当网页视图已经开始加载一个请求后,得到通知。
        //    [webView stopLoading];//取消载入内容
    }
    - (void)webViewDidFinishLoad:(UIWebView *)webView;//当网页视图结束加载一个请求之后,得到通知。
    - (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error {
        //    [webView reload];//重载
    }//当在请求加载中发生错误时,得到通知。会提供一个NSSError对象,以标识所发生错误类型。

    以上是IOS中UIWebView的基础使用要点详解,接下来一些UIWebView的常用注意点算是比较细节的部分。


    二、IOS中UIWebView常用注意点:
    1、与UIWebView进行交互,调用web页面中的需要传参的函数时,参数需要带单引号,或者双引号(双引号要进行转义在转义字符前加\),传递json字符串时不需要加单引号或双引号:

    -(void)webViewDidFinishLoad:(UIWebView *)webView
    
    {
        NSString *sendJsStr=[NSString stringWithFormat:@"openFile(\"%@\")", jsDocPathStr];
        [webView stringByEvaluatingJavaScriptFromString:sendJsStr];
    
    }

    2、在该代理方法中判断与webView的交互,可通过html里定义的协议实现:

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

    3、只有在webView加载完毕之后在能够调用对应页面中的js方法。(对应方法如第1条).详情请参考我另外一文章: [JS交互含Demo](http://www.jianshu.com/p/5c2b5d4952c9)

    4、为webView添加背景图片:

    webView.backgroundColor=[UIColor clearColor];
    //这句话很重要,webView是否是不透明的,no为透明 在webView下添加个imageView展示图片就可以了
    webView.opaque=NO;

    5、获取webView页面内容信息:

    NSString *docStr=[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.textContent"];
    //获取web页面内容信息,此处获取的是个son字符串
    
    SBJsonParser *parserJson=[[[SBJsonParser alloc]init]autorelease];
    
    NSDictionary *contentDic=[parserJson objectWithString:docStr];
    //将json字符串转化为字典

    6、将文件下载到本地址然后再用webView打开(打开HTML5):

    NSString *path = [[[[NSBundle mainBundle] resourcePath] stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"Documents"];
    NSString *resourceDocPath = [[NSString alloc] initWithString:path];
    
    self.filePath = [resourceDocPath stringByAppendingPathComponent:[NSString stringWithFormat:@"maydoc%@",docType]];
    
    NSData *attachmentData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:theUrl]];
    [attachmentData writeToFile:filePath atomically:YES];
    
    NSURL *url = [NSURL fileURLWithPath:filePath];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    
    [attachmentWebView loadRequest:requestObj];
    //删除指定目录下的文件
    
    NSFileManager *magngerDoc=[NSFileManager defaultManager];
    
    [magngerDoc removeItemAtPath:filePath error:nil];

    8、处理webView展示txt文档乱码问题:

    if ([theType isEqualToString:@".txt"]) {
    
        //txt分带编码和不带编码两种,带编码的如UTF-8格式txt,不带编码的如ANSI格式txt
    
        //不带的,可以依次尝试GBK和GB18030编码
    
        NSString* aStr = [[NSString alloc] initWithData:attachmentData encoding:NSUTF8StringEncoding];
        if (!aStr)
        {
    
            //用GBK进行编码
            aStr=[[NSString alloc] initWithData:attachmentData encoding:0x80000632];
    
        }
    
        if (!aStr)
        {
    
            //用GBK编码不行,再用GB18030编码
            aStr=[[NSString alloc] initWithData:attachmentData encoding:0x80000631];
    
        }
    
        //通过html语言进行排版
    
        NSString* responseStr = [NSString stringWithFormat:
                                 @"%@",aStr];
        [attachmentWebView loadHTMLString:responseStr baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];
    
        return;
    }

    9、使用webView加载本地或网络文件整个流程:

    9.1、Loading a local PDF file into the web view

    - (void)viewDidLoad {
    
        [super viewDidLoad];
    
        //从本地加载
    
        NSString *thePath = [[NSBundle mainBundle] pathForResource:@"iPhone_User_Guide" ofType:@"pdf"];
    
        if (thePath) {
    
            NSData *pdfData = [NSData dataWithContentsOfFile:thePath];
    
            [(UIWebView *)self.view loadData:pdfData MIMEType:@"application/pdf"
    
                            textEncodingName:@"utf-8" baseURL:nil];
    
        }
        //从网络加载
    
        [self.myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.apple.com/"]]];
    
    }

    9.2、The web-view delegate managing network loading

    - (void)webViewDidStartLoad:(UIWebView *)webView
    
    {
    
        // starting the load, show the activity indicator in the status bar
    
        [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    
    }
    
    - (void)webViewDidFinishLoad:(UIWebView *)webView
    
    {
    
        // finished loading, hide the activity indicator in the status bar
    
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    
    }
    
    - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
    
    {
    
        // load error, hide the activity indicator in the status bar
    
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    
        // report the error inside the webview
    
        NSString* errorString = [NSString stringWithFormat:@"An error occurred:%@",error.localizedDescription];
        [self.myWebView loadHTMLString:errorString baseURL:nil];
    
    }

    9.3、Stopping a load request when the web view is to disappear

    - (void)viewWillDisappear:(BOOL)animated {
    
        if ( [self.myWebView loading] ) {
    
            [self.myWebView stopLoading];
    
        }
    
        self.myWebView.delegate = nil;    // disconnect the delegate as the webview is hidden
    
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    
    }

    10、查找webView中的scrollview:

    - (void) addScrollViewListener {
    
        UIScrollView* currentScrollView;
    
        for (UIView* subView in self.webView.subviews) {
    
            if ([subView isKindOfClass:[UIScrollView class]]) {
    
                currentScrollView = (UIScrollView*)subView;
    
                currentScrollView.delegate = self;
    
            }
    
        }

    11、去掉webView的阴影,做成类似scrollView:

    - (void)clearBackgroundWithColor:(UIColor*)color {
        // 去掉webview的阴影
        self.backgroundColor = color;
        for (UIView* subView in [self subviews])
        {
            if ([subView isKindOfClass:[UIScrollView class]]) {
                for (UIView* shadowView in [subView subviews])
                {
                    if ([shadowView isKindOfClass:[UIImageView class]]) {
                        [shadowView setHidden:YES];
                    }
                }
            }
        }
    }

    12、取消长按webView上的链接弹出actionSheet的问题:

    -(void)webViewDidFinishLoad:(UIWebView *)webView {
        [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitTouchCallout = 'none';"];
    }

    13、取消webView上的超级链接加载问题:

    -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
        if (navigationType==UIWebViewNavigationTypeLinkClicked) {
            return NO;
        } else {
            return YES;
        }
    }

    14、在使用webView进行新浪微博分享时,webView会自动保存登陆的cookie导致项目中的分享模块有些问题,删除 webView的cookie的方法:

    -(void)deleteCookieForDominPathStr:(NSString *)thePath
    
    {
        //删除本地cookie,thePath为cookie路径通过打印cookie可知道其路径
    
        for(NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {
    
            if([[cookie domain] isEqualToString:thePath]) {
    
                [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
    
            }
    
        }
    
    }

    15、在UIWebView中使用flashScrollIndicators

    使用UIScrollView时,我们可以使用flashScrollIndicators方法显示滚动标识然后消失,告知用户此页面可以滚动,后面还有更多内容。UIWebView内部依赖于UIScrollView,但是其没有flashScrollIndicators方法,但可以通过其他途径使用此方法,如下所示。

    for (id subView in [webView subviews]){
    
        if ([subView respondsToSelector:@selector(flashScrollIndicators)]){
            [subView flashScrollIndicators];
        }
    }

    上述代码片段可以到webViewDidFinishLoad回调中使用,加载完网页内容后flash显示滚动标识。

    16、根据内容获取UIWebView的高度:

    有时候需要根据不同的内容调整UIWebView的高度,以使UIWebView刚好装下所有内容,不用拖动,后面也不会留白。有两种方式可根据加载内容获取UIWebView的合适高度,但都需要在网页内容加载完成后才可以,即需要在webViewDidFinishLoad回调中使用

    ①.使用sizeThatFits方法。

    - (void)webViewDidFinishLoad:(UIWebView *)webView
    
    {
    
        CGRect frame = webView.frame;
    
        frame.size.height = 1;
    
        webView.frame = frame;
    
        CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
    
        frame.size = fittingSize;
    
        webView.frame = frame;
    
    }

    sizeThatFits方法有个问题,如果当前UIView的大小比刚好合适的大小还大,则返回当前的大小,不会返回最合适的大小值,所以使用sizeThatFits前,先将UIWebView的高度设为最小,即1,然后再使用sizeThatFits就会返回刚好合适的大小。

    ②、使用JavaScript

    - (void)webViewDidFinishLoad:(UIWebView *)webView
    
    {
        CGRect frame = webView.frame;
    
        NSString *fitHeight = [webview stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"];
    
        frame.size.height = [fitHeight floatValue];
    
        webView.frame = frame;
    }

    总结:

    首先 对IOS开发中的UIWebView控件的基本使用进行初步的详解,提到了创建、设置属性、设置背景、怎么样加载网页内容等一系列的基础点,然后阐述使用UIWebView控件时常用用注意点,经常需要用到的地方,需要注意的地方,使得对开发ios APP混合模式的桥梁---UIWebView控件更加的了解、熟悉。UIWebView既能够加载服务器提供的URI,又能够加载本地的资源文件,还能够加载服务器返回的网页界面代码,可想而知UIWebView是多么强大的一控件桥梁,以后在开发中使用到的地方会越来越多。

    展开全文
  • UIWebView

    2018-11-07 21:28:00
    UIWebView 控件是做网络应用开发时使用的最多的一个控件,它实现了内置的浏览器(类似于 Safari),并且 UIWebView 继承自 UIView,可以将其像其它控件一样应用到需要的位置。 优点:简单,快速。 缺点:内存消耗大...

    1、简介

    • UIWebView 控件是做网络应用开发时使用的最多的一个控件,它实现了内置的浏览器(类似于 Safari),并且 UIWebView 继承自 UIView,可以将其像其它控件一样应用到需要的位置。
    • 优点:简单,快速。
    • 缺点:内存消耗大,对于手机端的硬件支持不够好,例如:定位,捏合(传统互联网只有点击动作)。
    • 应用场景:
      • 适合于内容版式变化比较大的应用。
        • 网易新闻,各种图文混排,甚至嵌入视频。
        • 菜谱,各种图片搭配,图文并茂。
        • 运动类的应用:羽毛球,后场高远球,来一段视频,图解说明,分解动作...。
      • 有些公司,有网站,没有 iOS 应用,着急上架,可以先用 webView 快速包装一个。
        • 百度的一系列应用,去年年初才慢慢的转成 iOS 应用。
      • iPhone 手机的浏览器 Safari 就是用 UIWebView 控件开发的。
        • 微信内嵌的浏览器就是 UIWebView 控件
    • iOS 9+ 中若要加载 http: 网络,需要在 Info.plist 中添加 App Transport Security Settings -> key: Allow Arbitrary Loads,value: YES。

    2、UIWebView 的创建

    
    UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 20, self.view.bounds.size.width, self.view.bounds.size.height-20)];
    
    // 将 webView 添加到屏幕
    [self.view addSubview:webView];
    
    // 加载网络地址
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]];
    
    // 适配屏幕
    webView.scalesPageToFit = YES;

    3、UIWebView 的设置

    // 加载指定 URL 所设定的内容
    /*
    异步加载,可以从服务器和本地读取
    */
    
    // 加载网络数据
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]];
    
    // 加载本地文件
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Baidu" 
                                                                                                 ofType:@"pdf"]]]];
    
    // 加载 HTML 字符串数据
    /*
    指定 baseURL 可加载图片
    */
    
    // 加载网络 HTML 字符串数据
    NSString *htmlString1 = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"https://m.baidu.com/"] 
                                         encoding:NSUTF8StringEncoding 
                                            error:NULL];
    [webView loadHTMLString:htmlString1 baseURL:[NSURL URLWithString:@"https://m.baidu.com/"]];
    
    // 加载本地 HTML 字符串数据
    NSString *htmlString2 = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Baidu" ofType:@"html"] 
                                          encoding:NSUTF8StringEncoding 
                                             error:NULL];
    [webView loadHTMLString:htmlString2 baseURL:nil];
    
    // 加载 Data 数据
    /*
    比 loadHTMLString 更底层
    */
    NSData *data = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Baidu" ofType:@"html"]]];
    [webView loadData:data MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:[NSURL URLWithString:@"https://m.baidu.com/"]];
    
    // 适配屏幕
    /*
    YES 页面可以通过放大和缩小去适应,用户也可以通过手势来放大和缩小
    */
    webView.scalesPageToFit = YES;
    
    // 设置自动分页模式
    /*
    UIWebPaginationModeUnpaginated,   // 默认不分页
    UIWebPaginationModeLeftToRight,
    UIWebPaginationModeTopToBottom,
    UIWebPaginationModeBottomToTop,
    UIWebPaginationModeRightToLeft
    */
    webView.paginationMode = UIWebPaginationModeLeftToRight;
    
    // 设置超链接类型
    /*
    UIDataDetectorTypePhoneNumber     = 1 << 0,          // Phone number detection
    UIDataDetectorTypeLink            = 1 << 1,          // URL detection
    UIDataDetectorTypeAddress         = 1 << 2,          // Street address detection
    UIDataDetectorTypeCalendarEvent   = 1 << 3,          // Event detection
    
    UIDataDetectorTypeNone            = 0,               // No detection at all
    UIDataDetectorTypeAll             = NSUIntegerMax    // All types
    */
    webView.dataDetectorTypes = UIDataDetectorTypeAll;
    
    // 设置是否用内嵌 HTML5 播放视频
    /*
    内嵌播放 HTML 中的 video 元素必须包含 webkit-playsinline 属性
    YES 内嵌播放,NO 本地全屏控制,iPhone Safari defaults to NO. iPad Safari defaults to YES
    */
    webView.allowsInlineMediaPlayback = NO;
    
    // 设置是否需要用户触发来启动媒体播放
    /*
    iPhone and iPad Safari both default to YES
    */
    webView.mediaPlaybackRequiresUserAction = NO;
    
    // 设置本页面是否可以 AirPlay 播放
    /*
    iPhone and iPad Safari both default to YES
    */
    webView.mediaPlaybackAllowsAirPlay = YES;
    
    // 设置是否把网页内容全部加载到内存中再去渲染
    /*
    iPhone and iPad Safari both default to NO
    */
    webView.suppressesIncrementalRendering = NO;
    
    // 设置是否需要用户触发显示键盘
    /*
    default is YES
    */
    webView.keyboardDisplayRequiresUserAction = NO;
    
    // 刷新
    /*
    重新加载页面
    */
    [webView reload];
    
    // 停止加载
    /*
    加载过程中,强行停止加载
    */
    [webView stopLoading]; 
    
    // 返回至上一个链接
    /*
    在产生多个链接浏览时,可以返回至浏览历史的上一个链接
    */
    [webView goBack];
    
    // 前进至下一个链接
    /*
    在产生多个链接浏览时,可以前进至浏览历史的下一个链接
    */
    [webView goForward];
    
    // 设置代理,需遵守协议 <UIWebViewDelegate>
    webView.delegate = self;

    4、UIWebView 的协议方法

    • 需遵守协议 UIWebViewDelegate,并设置代理
    // 将要开始加载网页
    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    
        return YES;
    }
    
    // 开始加载网页
    - (void)webViewDidStartLoad:(UIWebView *)webView {
    
    }
    
    // 加载网页完成
    - (void)webViewDidFinishLoad:(UIWebView *)webView {
    
    }
    
    // 加载网页失败
    - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
    
    }
    

    转载于:https://www.cnblogs.com/CH520/p/9413464.html

    展开全文
  • 随说 : 最近有个需求,是将公司的一个内网的页面嵌套在app中作为一个模块.这不是很简单的webView请求一下就行了么?其实内里大有乾坤.自己也将思路整理一遍 ... UIWebView *webView = [[UIWebView al

    随说 : 最近有个需求,是将公司的一个内网的页面嵌套在app中作为一个模块.这不是很简单的webView请求一下就行了么?其实内里大有乾坤.自己也将思路整理一遍

    UIWebView

    UIWebView的基本使用方法 :

    就这样就已经整整个baidu的页面展示到app上
    下面我们看一下webView的属性与方法

        UIWebView *webView = [[UIWebView alloc] initWithFrame:[UIScreen mainScreen].bounds];
        self.view = webView;
        NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        [webView loadRequest:request];

    UIWebView的层级结构 :


    UIWebView的类继承关系

    UIWebView的属性 :

    // 代理属性 重点需要知道代理方法的使用
    @property (nullable, nonatomic, assign) id <UIWebViewDelegate> delegate;
    
    // 这个是webView内部的scrollView 只读,但是利用这个属性,设置scrollView的代理,就可以控制整个webView的滚动事件
    @property(nonatomic, readonly, strong) UIScrollView *scrollView;
    
    // webView的请求,这个属性一般在整个加载完成后才能拿到
    @property (nullable, nonatomic, readonly, strong) NSURLRequest *request;
    
    // A Boolean value indicating whether the receiver can move backward. (read-only)
    // If YES, able to move backward; otherwise, NO.
    // 如果这个属性为YES,才能后退
    @property (nonatomic, readonly, getter=canGoBack) BOOL canGoBack;
    
    // A Boolean value indicating whether the receiver can move forward. (read-only)
    // If YES, able to move forward; otherwise, NO.
    // 如果这个属性为YES,才能前进
    @property (nonatomic, readonly, getter=canGoForward) BOOL canGoForward;
    
    // A Boolean value indicating whether the receiver is done loading content. (read-only)
    // If YES, the receiver is still loading content; otherwise, NO.
    // 这个属性很好用,如果为YES证明webView还在加载数据,所有数据加载完毕后,webView就会为No
    @property (nonatomic, readonly, getter=isLoading) BOOL loading;
    
    //A Boolean value determining whether the webpage scales to fit the view and the user can change the scale.
    //If YES, the webpage is scaled to fit and the user can zoom in and zoom out. If NO, user zooming is disabled. The default value is NO.
    // YES代表网页可以缩放,NO代表不可以缩放
    @property (nonatomic) BOOL scalesPageToFit;
    
    // 设置某些数据变为链接形式,这个枚举可以设置如电话号,地址,邮箱等转化为链接
    @property (nonatomic) UIDataDetectorTypes dataDetectorTypes NS_AVAILABLE_IOS(3_0);
    
    // iPhone Safari defaults to NO. iPad Safari defaults to YES
    // 设置是否使用内联播放器播放视频
    @property (nonatomic) BOOL allowsInlineMediaPlayback NS_AVAILABLE_IOS(4_0); 
    
    // iPhone and iPad Safari both default to YES
    // 设置视频是否自动播放
    @property (nonatomic) BOOL mediaPlaybackRequiresUserAction NS_AVAILABLE_IOS(4_0); 
    
    // iPhone and iPad Safari both default to YES
    // 设置音频播放是否支持ari play功能
    @property (nonatomic) BOOL mediaPlaybackAllowsAirPlay NS_AVAILABLE_IOS(5_0); 
    
    // iPhone and iPad Safari both default to NO
    // 设置是否将数据加载入内存后渲染界面
    @property (nonatomic) BOOL suppressesIncrementalRendering NS_AVAILABLE_IOS(6_0); 
    
    // default is YES
    // 设置用户是否能打开keyboard交互
    @property (nonatomic) BOOL keyboardDisplayRequiresUserAction NS_AVAILABLE_IOS(6_0); 
    
    /* IOS7 */ 以后的新特性
    // 这个属性用来设置一种模式,当网页的大小超出view时,将网页以翻页的效果展示,枚举如下:
    @property (nonatomic) UIWebPaginationMode paginationMode NS_AVAILABLE_IOS(7_0);
    typedef NS_ENUM(NSInteger, UIWebPaginationMode) { 
    UIWebPaginationModeUnpaginated, //不使用翻页效果 
    UIWebPaginationModeLeftToRight, //将网页超出部分分页,从左向右进行翻页 
    UIWebPaginationModeTopToBottom, //将网页超出部分分页,从上向下进行翻页 
    UIWebPaginationModeBottomToTop, //将网页超出部分分页,从下向上进行翻页 
    UIWebPaginationModeRightToLeft //将网页超出部分分页,从右向左进行翻页 
    };
    
    // This property determines whether certain CSS properties regarding column- and page-breaking are honored or ignored. 
    // 这个属性决定CSS的属性分页是可用还是忽略。默认是UIWebPaginationBreakingModePage 
    @property (nonatomic) UIWebPaginationBreakingMode paginationBreakingMode NS_AVAILABLE_IOS(7_0);
    
    // 设置每一页的长度
    @property (nonatomic) CGFloat pageLength NS_AVAILABLE_IOS(7_0);
    
    // 设置每一页的间距
    @property (nonatomic) CGFloat gapBetweenPages NS_AVAILABLE_IOS(7_0);
    
    // 获取页数
    @property (nonatomic, readonly) NSUInteger pageCount NS_AVAILABLE_IOS(7_0);

    还有一些属性请详细翻苹果文档

    UIWebView的代理方法 :

    UIWebView的代理方法是用的最多的方法,并且一般来说,相对Web页面作处理都在这相应的4个方法中
    分别解释一下方法的调用情况

        // Sent before a web view begins loading a frame.请求发送前都会调用该方法,返回NO则不处理这个请求
        - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
    
        // Sent after a web view starts loading a frame. 请求发送之后开始接收响应之前会调用这个方法
        - (void)webViewDidStartLoad:(UIWebView *)webView;
    
        // Sent after a web view finishes loading a frame. 请求发送之后,并且服务器已经返回响应之后调用该方法
        - (void)webViewDidFinishLoad:(UIWebView *)webView;
    
        // Sent if a web view failed to load a frame. 网页请求失败则会调用该方法
        - (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error;

    UIWebView的对象方法

    // 加载Data数据创建一个webView
    - (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)encodingName baseURL:(NSURL *)baseURL
    
    // 加载本地HTML创建一个webView
    - (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL
    
    // 加载一个请求创建一个webView
    - (void)loadRequest:(NSURLRequest *)request
    
    // 刷新网页
    - (void)reload;
    
    // 停止网页加载内容
    - (void)stopLoading;
    
    // 后退
    - (void)goBack;
    
    // 前进
    - (void)goForward;
    
    // 执行JS方法
    - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script






    WKWebView

    WKWebView的简介 :

    从文档中可以看到,这个是IOS8之后新增的一个类,也是苹果推崇的一个新的类


    WKWebView的类层级结构

    WKWebView的基本使用方法 :

    其实和UIWebView的用法没什么区别
    但是WKWebView相对于UIWebView强大了很多,内存的消耗相对少了,所提供的接口也丰富了。
    推荐使用
    多了一部操作就是需要包含webkit框架
    @import webkit

        WKWebView *webView = [[WKWebView alloc] initWithFrame:[UIScreen mainScreen].bounds];
        self.view = webView;
        NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        [webView loadRequest:request];

    WKWebView的属性 :

    // UIWebView 中会自动保存Cookie,如果登录了一次下次再次进入的时候,会记住登录状态
    // 在WKWebView中,新增一个configuration属性,  configuration 让WKWebView知道登录状态,
    // configuration 可以通过已有的Cookie进行设置,也可以通过保存上一次的configuration进行设置
    // WKWebViewConfiguration类中也有一些相应的属性
    @property (nonatomic, readonly, copy) WKWebViewConfiguration *configuration;
    
    // The methods of the WKNavigationDelegate protocol help you track the progress of the web site's main frame navigations and decide load policy for main frame and subframe navigations.
    // WKWebView中,加入了网站导航的概念,这个对象决定主框架导航加载方法协议。
    @property (nullable, nonatomic, weak) id <WKNavigationDelegate> navigationDelegate;
    
    // The WKUIDelegate class provides methods for presenting native user interface 
    elements on behalf of a webpage.
    // WKWebView中,加入了网站窗口的概念,这个对象决了webView窗口的一些方法协议。
    @property (nullable, nonatomic, weak) id <WKUIDelegate> UIDelegate;
    
    A WKBackForwardList object is a list of webpages previously visited in a web view that can be reached by going back or forward.
    // WKWebView中,加入了网站列表的概念,这个WEBBackForwardList对象是以前在Web视图访问的网页,可以通过去后退或前进
    @property (nonatomic, readonly, strong) WKBackForwardList *backForwardList;

    还有很多方法,同样可以查文档看到

    WKWebView的代理方法 :

    有一些方法和UIWebView是基本一直的,但是因为返回了navigation,所能用到的属性多了很多,另外多了一些方法,将请求与相应的整个过程

    - (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView{
        NSLog(@"webViewWebContentProcessDidTerminate:  当Web视图的网页内容被终止时调用。");
    }
    
    
    - (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation
    {
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        NSLog(@"webView:didFinishNavigation:  响应渲染完成后调用该方法   webView : %@  -- navigation : %@  \n\n",webView,navigation);
    }
    
    
    - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(null_unspecified WKNavigation *)navigation
    {
        [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
        NSLog(@"webView:didStartProvisionalNavigation:  开始请求  \n\n");
    }
    
    - (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation {
        NSLog(@"webView:didCommitNavigation:   响应的内容到达主页面的时候响应,刚准备开始渲染页面应用 \n\n");
    }
    
    
    // error
    - (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error {
        // 类似 UIWebView 的- webView:didFailLoadWithError:
    
        NSLog(@"webView:didFailProvisionalNavigation:withError: 启动时加载数据发生错误就会调用这个方法。  \n\n");
    }
    
    
    
    - (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error{
        NSLog(@"webView:didFailNavigation: 当一个正在提交的页面在跳转过程中出现错误时调用这个方法。  \n\n");
    }
    
    
    
    - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
    
        NSLog(@"请求前会先进入这个方法  webView:decidePolicyForNavigationActiondecisionHandler: %@   \n\n  ",navigationAction.request);
    
        decisionHandler(WKNavigationActionPolicyAllow);
    
    }
    
    - (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler{
    
        NSLog(@"返回响应前先会调用这个方法  并且已经能接收到响应webView:decidePolicyForNavigationResponse:decisionHandler: Response?%@  \n\n",navigationResponse.response);
    
        decisionHandler(WKNavigationResponsePolicyAllow);
    }
    
    
    
    - (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation{
    
        NSLog(@"webView:didReceiveServerRedirectForProvisionalNavigation: 重定向的时候就会调用  \n\n");
    }

    WKWebView的对象方法 :

    这些方法,基本上和UIWebView中的使用用法是一致的,所以

    // 这是加载网页最常用的一种方式,通过一个网页URL来加载一个WKWebView,这个URL可以是远程的也可以是本地的,例如我加载百度的主页
    - (nullable WKNavigation *)loadRequest:(NSURLRequest *)request;
    
    // 根据一个文件,加载一个WKWebView
    - (nullable WKNavigation *)loadFileURL:(NSURL *)URL allowingReadAccessToURL:(NSURL *)readAccessURL NS_AVAILABLE(10_11, 9_0);
    
    // 这个方法需要将html文件读取为字符串从而加载为WKWebView,其中baseURL是我们自己设置的一个路径,用于寻找html文件中引用的图片等素材。
    - (nullable WKNavigation *)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL;
    
    // 这个方式使用的比较少,但也更加自由,其中data是文件数据,MIMEType是文件类型,characterEncodingName是编码类型,baseURL是素材资源路径
    - (nullable WKNavigation *)loadData:(NSData *)data MIMEType:(NSString *)MIMEType characterEncodingName:(NSString *)characterEncodingName baseURL:(NSURL *)baseURL NS_AVAILABLE(10_11, 9_0);

    基本使用

    下面会总结一些我在开发过程中遇到的坑,和解决问题的一些思路,不过在此之前我发现,如果要webView玩得好,有以下几点的只是也需要掌握好,因为我认为在H5崛起的今天,源生App和H5的交互之间会产生比较大改变,而且源生与H5之间的混编,越来越被重视.所以 :

    1. 源生技术,特别是有关于webView这一块的API要非常熟练,
    2. js语法, js的语法需要熟练,特别是操作document的几个常用js,标签需要用得滚瓜烂熟.
    3. 要非常了解网络请求 - 响应的机制,理解请求头,响应头,等等.HTTP的整套协议

    需求一 : 展示一个网页,但是需要隐藏一部分页面

    首先看看百度的页面,这是用Chrome浏览器打开的开发者模式
    基本界面组成如下,基本使用用法请详情百度,这里不作介绍


    假设现在想将这个Logo由网页开始加载就去掉


    百度的logo就是一个div套着一个image标签


    - (void)webViewDidFinishLoad:(UIWebView *)webView
    {
        // 在HTML标签都加载完成后,开始处理HTML标签,调用JS,操作document
        [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('plus-card').remove();"];
    }

    就这样, logo标签就被去掉了,思路就是等HTML加载完成后,操作JS从而操作document标签从而改变整个html页面的应用,下图是去掉整个Body主题内容后的结果


    另外还可以将一段函数封装到里面,执行函数,原理是通过stringByEvaluatingJavaScriptFromString将JS函数写进head标签中,然后再调用该函数

    // 自定义editMyLogo函数
    [webView stringByEvaluatingJavaScriptFromString:@"var script = document.createElement('script');"
         "script.type = 'text/javascript';"
         "script.text = \"function editMyLogo() { "
         "var logo = document.getElementById('logo');"
         "logo.innerHTML= logo.innerHTML + '这是我自己定义的名字';"
         "var imglist = logo.getElementsByTagName('IMG');"
         "for (i=0 ; i < imglist.length ; i++ ){"
         "imglist[i].src = 'http://pic.to8to.com/attch/day_160218/20160218_d968438a2434b62ba59dH7q5KEzTS6OH.png';"
         "}"
         "}\";"
         "document.getElementsByTagName('head')[0].appendChild(script);"];
    
        // 执行editMyLogo函数
        [webView stringByEvaluatingJavaScriptFromString:@"editMyLogo();"];

    效果如下 :


    有几点问题,这种操作是在webViewDidFinishLoad方法下进行的,webViewDidFinishLoad方法是webView的document已经渲染好后,再去处理这个这个页面.

    1. 你会发现有时候会出现一些闪屏现象,原因是渲染过后,内部处理JS代码后,页面会再渲染一次
    2. 资源浪费,假设这边的需求只需要显示10%的内容,却要加载100%的内容,不过这一方面还需要网页端作出很好的适配
    3. 某些时候,JS会失效,不知道什么原因,有些时候自定义加载的JS的方法并没有执行到.等于内容并没有屏蔽
    4. 等等..

    需求二 : 怎样处理403,404的情况 ?


    @property (nonatomic, assign) BOOL isPost; // 定义一个变量
    
    // 每一个请求开始发送前都会调用这个方法
    // 1, 定义一个全局变量currentRequest,用作保存当前的请求
    // 2, 将请求转换成data,然后处理data再将data作为请求数据再次请求
    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
    
        if (!_isPost) {
            NSHTTPURLResponse *response = nil;
            NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
            if (response.statusCode == 404) {
                // 这里处理 404 代码
            } else if (response.statusCode == 403) {
                // 这里处理 403 代码
            } else {
    
                _isPost = true;
                [webView loadData:data MIMEType:@"text/html" textEncodingName:@"NSUTF8StringEncoding" baseURL:[request URL]];
    
            }
            return NO;
        }else{
            NSLog(@"\n\n shouldStartLoadWithRequest请求准备 --  %@ \n\n ",request);
            _isPost = NO;
            return YES;
        }
    }

    需求一 : 进一步改进


    在处理HTML这里,将你想隐藏的页面,加上 display:none 属性,
    或者,将整段HTML标签去掉.




    展开全文
  • iOS-UIWebView简单使用

    2018-07-18 23:57:29
    1、什么是UIWebView UIWebView是ios内置的浏览器控件,可以用来直接加载远程的网页资源,也可以加载绝大部分的常见文件htm/html、txt、pdf/keynote、ppt、doc/docx、音视频文件等等,还可以通过调用UIWebView提供的...

    1、什么是UIWebView

    UIWebView是ios内置的浏览器控件,可以用来直接加载远程的网页资源,也可以加载绝大部分的常见文件htm/html、txt、pdf/keynote、ppt、doc/docx、音视频文件等等,还可以通过调用UIWebView提供的api实现页面的前进、后退、刷新等动作,甚至还可以动态的设置网页内容。

    2.简单使用加载网页

         /**
         [UIScreen mainScreen].bounds.size.width    硬件屏幕的宽
         [UIScreen mainScreen].bounds.size.height   硬件屏幕的高
         **/
        //1.创建一个UIWebView
        UIWebView *web = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
        
        //2.要打开的网址
        NSString *openURL = @"https://www.baidu.com/";
        NSURL *URL = [NSURL URLWithString:openURL];
        NSURLRequest *requestURL = [NSURLRequest requestWithURL:URL];
        
        //3。加载内容
        [web loadRequest:requestURL];
        
        [self.view addSubview:web];

    模拟机运行效果图:

    3.使用导航效果

    浏览器一般都会有浏览导航按钮,我们在上一步的基础上加上一个返回按钮。

         /**
         UIWebView类内部会管理浏览器的导航动作,可以通过一下函数控制
         [web goBack];//根据历史返回上一页
         [web goForward];//根据历史前往下一页
         [web reload];//重新加载
         [web stopLoading];//停止加载
         **/
        //4.在导航栏添加一个按钮,这个按钮能返回上一页
        UIBarButtonItem *goBack = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemReply target:self action:@selector(goBack)];
    
        self.navigationItem.rightBarButtonItem = goBack;
    -(void) goBack {
        [web goBack];
    }

    运行效果图:

    4.UIWebView加载本地文件

    这里我举例加载一个音频文件,其他格式:png、jpg、gif、txt、docx、视频、html等文件也可如此。

         /**
         第一步:获取要加载的本地文件的路径
         pathForResource:文件名
         ofType:格式名
         **/
        NSString *path = [[NSBundle mainBundle] pathForResource:@"薛之谦-那是你离开了北京的生活" ofType:@"mp3"];
        
        /**
         第二步:根据文件路径获取url
         **/
        NSURL *url = [NSURL fileURLWithPath:path];
        
        /**
         第三步:根据路径加载文件为 NSData
         **/
        NSData *data = [NSData dataWithContentsOfFile:path];
        
        /**
         第四步:web 加载本地data
         loadData:要加载的文件的data
         MIMEType:文件的Type名
         textEncodingName:编码格式一般为 @"UTF-8"
         baseURL:要加载文件的url
         **/
        [web loadData:data MIMEType:[self mimeType:url] textEncodingName:@"UTF-8" baseURL:url];
    /根据 url 获取 MIMEType
    - (NSString *)mimeType:(NSURL *)url {
        
        //根据 url 得到 NSURLRequest(url请求)
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        
        //初始化一个 NSURLResponse(url响应)
        NSURLResponse *response = nil;
        
        //根据 NSURLRequest 获得 NSURLResponse
        [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
        
        //将 NSURLResponse 中的 MIMEType 返回
        return response.MIMEType;
    }

    运行效果图:

    5.UIWebView加载html文件

    5.1.加载后台或网上下载的html字符串

        /**
         如果html文件从后台或网上下载的字符串
         **/
        NSString *html = @"";
        
        NSURL *url  = [NSURL URLWithString:html];
        
        [web loadHTMLString:html baseURL:url];

    5.2.加载本地html文件,可以用4.加载本地文件的方法,也可以用uiwebview专门加载html的方法。

        //html的路径
        NSString *htmlpath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
        
        NSString *html= [NSString stringWithContentsOfFile:htmlpath encoding:NSUTF8StringEncoding error:nil];
        
        NSURL *url  = [NSURL URLWithString:html];
        
        //加载html
        //baseURL:指导UIWebView对象如何跟随链接和加载远程资源
        [web loadHTMLString:html baseURL:url];

    运行效果图:

    6. UIWebView的代理函数

    /**
     webView的最重要的代理函数,用来监听、拦截url的跳转或点击 
     **/
    -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
        
        //获取每次跳转的url
        NSString *url = [request.URL absoluteString];
        
        //然后可以将监听的 url 和特定的网址进行对比:拦截动作
        if ([url isEqualToString:@""]) {
            //TODO YOU WANT TODO
            return NO;//return NO 就不会继续跳转下去
        }
        
        return YES;//return YES 就会继续跳转下去
    }

    UIWebView使用注意事项(坑点)

    • 释放UIWebView对象之前首先要将其delegate设置为nil,否则可能会出现异常crash等问题,一般在dealloc方法中处理;
    • UIWebView对象不应该被添加到UIScrollView对像的视图上,否则可能会出现无法预料的问题,因为系统无法正确处理两个视图的点击、滚动、手势操作等事件;
    • 加载本地html文件时,确保使用loadHTMLString:baseURL:方法,不要使用loadRequest:方法;
    • UIWebView的stringByEvaluatingJavaScriptFromString:方法为同步执行,当前线程将等待该方法执行完成,因此调用该方法将会导致app出现挂起现象;
    展开全文
  • UIWebView 无缝切换到 WKWebView

    万次阅读 2015-07-09 10:12:28
    优点: 加载速度 比UIWebView提升差不多一倍的, 内存使用上面,反而还少了一半。  缺点: WKWebView 不支持缓存 和 NSURLProtocol 拦截了 我建议如果对缓存不高的页面可以使用,用户体验会提高很多。 由于项目...
  • iOS 检测UIWebView还是否存在

    千次阅读 2020-05-09 17:47:14
    3.如果觉得终端不好看可以输入下面命令生成一个txt文本搜索关键词UIWebView看哪个隐藏的或者第三方还存在 grep -r UIWebView . >> xxx.txt 4这个会在你项目中出现一个t x t文件打开搜索 Binary file ./...
  • 现在工程属于电商类APP,混合开发,缓存出现问题,在网上找了demo,吧URL换成 我工程的URL后离线加载不了缓存数据,页面直接就是白屏,在网上也找方法了,还是不行!请问这是为什么,大神们
  • Android:最全面的 Webview 详解

    万次阅读 多人点赞 2016-09-28 19:58:14
    前言 现在很多App里都内置了Web网页(Hyprid App),比如说很多电商平台,淘宝、京东、聚划算等等,如下图 那么这种该如何实现呢?其实这是Android里一个叫WebView的组件实现的。今天我将全面介绍WebView的常用用法...
  • WKWebView代替UIWebView使用

    千次阅读 2017-02-28 16:05:41
    webView是我们日常开发中不可缺少的一个组件,通常我们都是使用...iOS8之后苹果推荐使用WKWebView替代UIWebView,其主要的有点有: 在性能、稳定性WKWebView更多的支持HTML5的特性WKWebView更快,占用内存可能只有U
  • UIWebView 替换 WKWebView

    2020-07-23 19:59:59
    目录一:基本使用二:替换1、scalesPageToFit 属性替换:2、UIWebViewWKWebView对应代理方法2.1、shouldStartLoadWithRequest2.2、开始加载2.3、加载成功2.4、加载失败3、Native和JS互相调用:3.1、Native调用js...
  • WKWebView替换UIWebView

    2017-08-16 19:17:03
    先使用WKWebView基本方法写个例子,加载baidu页面,写法跟UIWebView类似- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. WKWebViewConfigu
  • IOS开发中因为引入cocos2dx,导致代码审核不通过无法提交( Apple will stop accepting...不想更新的话,可以修改UIWebViewWKWebView。具体的修改方式使用以下的文件替换cocoas引擎中的UIWebViewImpl-ios.mm文件即可。
  • 开发App的过程中,常常会遇到在App内部加载网页,通常用UIWebView加载。这个自iOS2开始使用的网页加载器一直是开发的心病:加载...iOS8以后,苹果推出了新框架Webkit,提供了替换UIWebView的组件WKWebView。各种UIWe
  • 一、整体介绍UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView。通过简单的测试即可发现UIWebView占用过多内存,且内存峰值更是夸张。WKWebView网页加载速度也有提升,但是并...
  • iOS12 UIWebView转换WKWebView

    千次阅读 2019-08-19 17:15:52
    iOS12已经完全弃用UIWebView改用WKWebView WKWebView是苹果公司在iOS8系统推出的,相比于UIWebView的优势: 1.在性能、稳定性、占用内存方面有很大提升; 2.允许JavaScript的Nitro库加载并使用(UIWebView中限制) 3....
  • UIWebView是在iOS2推出的,在iOS8之后,使用WKWebView来取代UIWebView。因为UIWebView加载速度慢,占用内存多,优化困难,所以iOS8以后,苹果推出了新框架Webkit,提供了组件WKWebView。 注意:WKWebView在ios8系统...
  • 调研UIWebViewWKWebView的异同 一、UIWebView 介绍 1.UIWebView网页加载展现的几种方法 // 使用 NSURLRequest 的方式加载网页 (url可以是远程也可以是本地) - (void)loadRequest:(NSURLRequest *)request; /*! ...
  • 前言在前面的文章中,我们介绍了UIWebViewWKWebView一些使用,与JS的交互和一些坑,相信看过的小伙伴们,已经大概清楚了吧,如果有问题,欢迎提问。本文是本系列文章的最后一篇,主要为小伙伴们分享下Safari调试、...
  • iOS:WKWebViewUIWebView的区别

    千次阅读 2017-03-06 11:21:59
    WKWebViewUIWebView的区别iOS8以后,苹果推出了新框架Wekkit,提供了替换UIWebView的组件WKWebView。使用WKWebView,速度会更快,占用内存少。WKWebView的特性: 在性能、稳定性、功能方面有很大提升,直观体现是...
  • iOS网络3—UIWebViewWKWebView使用详解

    千次阅读 2016-03-16 16:34:24
    UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView。通过简单的测试即可发现UIWebView占用过多内存,且内存峰值更是夸张。WKWebView网页加载速度也有提升,但是
  • UIWebView完美切换至WKWebView

    千次阅读 2017-05-24 10:30:36
    iOS8之后,苹果推出了WebKit这个框架,用来替换原有的UIWebView,新的控件优点多多,不一一叙述。由于一直在适配iOS7,就没有去替换,现在仍掉了iOS7,以为很简单的就替换过来了,然而在替换的过程中,却遇到了很多...
  • UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView。通过简单的测试即可发现UIWebView占用过多内存,且内存峰值更是夸张。WKWebView网页加载速度也有提升,但是并不像内存那样...
  • 我将UIWebViewWKWebView封装合并成一个网页容器LCWebView. 下面是我的做法: 二,LCWebViewDelegate (此代理所有方法均为WKWebViewUIWebView共同拥有的协议,支持iOS7及以上)此协议有5个方法.(如果项目要求不多,
  • iOS有UIWebviewWKWebview两种webview。从iOS13开始苹果将UIWebview列为过期API。2020年4月起App Store将不再接受使用UIWebView的新App上架、2020年12月起将不再接受使用UIWebView的App更新。 在进行5+app开发中,...
  • UIWebVIewWKWebView封装到一起,当系统版本大于8.0时候选择WKWebView降低性能消耗,当小于8.0时候使用UIWebView进行加载 1、将项目中的根目录中的“ZLCWebView源文件”中的ZLCWebView.h及m拖入工程(或直接在...
  • 1.UIWebViewWKWebView UIWebView 1)UIWebView是iOS2就有了的,占用内存也比较多,内存峰值也挺夸张的 2)UIWebView继承自UIView 是用来加载网页的类,可以简单理解成就是一个view WKWebView 1)相比UIWebView的话,...
  • WKWebViewUIWebView

    2016-10-19 16:56:22
    UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView。通过简单的测试即可发现UIWebView占用过多内存,且内存峰值更是夸张。WKWebView网页加载速度也有提升,但是并不像内存那样...
  • UIWebViewWKWebView

    2019-05-03 00:25:29
    UIWebView 什么是UIWebView UIWebView是iOS内置的浏览器控件 系统自带的Safari浏览器就是通过UIWebView实现的 UIWebView不但能加载远程的网页资源,还能加载绝大部分的常见文件 html\htm pdf、doc、ppt、txt...
  • iOS H5容器的一些探究:UIWebViewWKWebView的比较和选择
  • WKWebView相对UIWebView的优劣势

    千次阅读 2018-06-01 10:43:54
    在开发过程中,iOS 中实现加载 web 页面主要有两种控件,UIWebViewWKWebview,两种控件对应具体的实现方法不同。WKWebView 是苹果在iOS 8中引入的新组件,目的是提供一个现代的支持最新Webkit功能的网页浏览控件...

空空如也

1 2 3 4 5 ... 20
收藏数 25,131
精华内容 10,052
关键字:

uiwebview