WKWebView的使用

在新的iOS项目中使用WKWebView

在项目中主要用到的对象

WKWebViewConfiguration

主要包含一些属性,用来初始化 WKWebView

WKProcessPool

当一个 web 被初始化时 ,一个新的处理将产生针对一个特殊的池子 , 多个web可以共享一个

WKUserContentController

可以让js调用ios中特定的方法


1  Wkweb基本配制代码如入:

#pragma mark -- 懒加载WKWebView

-(WKWebView*)wkWebView{

    if (!_wkWebView) {

        WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];

        // 设置偏好设置

        config.preferences = [[WKPreferences alloc] init];

        // 默认为0

        config.preferences.minimumFontSize = 10;

        // 默认认为YES

        config.preferences.javaScriptEnabled = YES;

        // iOS上默认为NO,表示不能自动通过窗口打开

        config.preferences.javaScriptCanOpenWindowsAutomatically = NO;

        // web内容处理池

        config.processPool = [ProcessPool sharedProcessPool].wkProcessPool;

        

        // 通过JSwebview内容交互

        config.userContentController = [[WKUserContentController alloc] init];

        // 注入JS对象名称AppModel,当JS通过AppModel来调用时,

        // 我们可以在WKScriptMessageHandler代理中接收到

        [config.userContentController addScriptMessageHandler:self name:@"webViewApp"];

        

        self.wkWebView = [[WKWebView alloc] initWithFrame:CGRectMake(0,0,kUIScreenWidth - BottomMenuButtonW,kUIScreenHeight)

                                            configuration:config];

        //禁止缩放

        self.wkWebView.scrollView.scrollEnabled = NO;

        self.wkWebView.scrollView.delegate = self;

        [self.view addSubview:self.wkWebView];

        // 导航代理

        self.wkWebView.navigationDelegate = self;

        // webview UI交互代理

        self.wkWebView.UIDelegate = self;

        [self.wkWebView addObserver:self forKeyPath:NSStringFromSelector(@selector(estimatedProgress)) options:0 context:WkwebBrowserContext];

        //开启手势触摸

        _wkWebView.allowsBackForwardNavigationGestures = YES;

        // 设置 可以前进 后退

        //适应你设定的尺寸

        [_wkWebView sizeToFit];

    }

    return _wkWebView;

}


2.WK中常用的代理方法使用如下

#pragma mark - WKScriptMessageHandler   接收window.webkit.messageHandlers.AppModel.postMessage({body: 'call js confirm in js'}) 注入的数据;

-(void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{

    if ([message.nameisEqualToString:@"webViewApp"]) {

        // 打印所传过来的参数,只支持NSNumber, NSString, NSDate, NSArray,

        // NSDictionary, and NSNull类型

        MyLog(@"%@", message.body);

    }    

}



#pragma mark - WKUIDelegate

-(void)webViewDidClose:(WKWebView *)webView {

    MyLog(@"%s",__FUNCTION__);

}



//js调用 alert('Objective-C call js to show alert') 会执行此代理方法

-(void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler {

    MyLog(@"%s",__FUNCTION__);

      completionHandler();

    MyLog(@"%@", message);

}



// js调用confirm('confirm', 'Objective-C call js to show confirm')会执行此代理方法

-(void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL result))completionHandler {

    MyLog(@"%s",__FUNCTION__);

    completionHandler(YES);

    MyLog(@"%@", message);

}


// js调用   prompt('Hello', 'Please input your name:')会执行此代理方法
-(void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullableNSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * __nullable result))completionHandler {

    MyLog(@"%s",__FUNCTION__);

    completionHandler(defaultText);

}



3.禁止一些缩放

#pragma mark --UIScrollViewDelegate 禁止缩放

-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{

    return nil;

}











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值