博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WKWebView 基本使用及与JS交互,以及低版本系统崩溃问题解决
阅读量:7044 次
发布时间:2019-06-28

本文共 3424 字,大约阅读时间需要 11 分钟。

hot3.png

前言

工作中,重构了一个简单的WKWebView页面,页面底部要拼接原生UItableView,所以就写一写,遇到的问题总结。

使用

参考资料

导入文件


#import 

协议


单例


/** WKWebView 单例*/- (WKWebView*)WebView{    if (!_WebView) {        //js配置        WKWebViewConfiguration *config = [WKWebViewConfiguration new];        WKUserContentController* userContentController = [WKUserContentController new];        [userContentController addScriptMessageHandler:self name:@"showName"];        config.userContentController = userContentController;        //单例        WKWebView* webview = [[WKWebView alloc]initWithFrame:PKScreenFrame configuration:config];        webview.backgroundColor = PKChatBackgroundColor;        webview.size = CGSizeMake(PKScreenW, PKScreenH - PKNavigationH);        webview.navigationDelegate = self;        webview.UIDelegate = self;        webview.scrollView.delegate = self;        _WebView = webview;    }    return _WebView;}

webview代理


// 页面真正开始加载- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation{}// 页面将要加载- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{        }// 页面加载完成- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation{}// 页面加载失败- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error{}// 初始化点击配置-(WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures{    if (!navigationAction.targetFrame.isMainFrame) {        [webView loadRequest:navigationAction.request];    }    return nil;}

js调用native


native代理

//js回调- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{	if ([message.name isEqualToString:@"showName"]) {        NSString *info = [NSString stringWithFormat:@"你好 %@, 很高兴见到你",message.body];        [self showMsg:info];    }    }

js方法

//其中  showName字段为native 的消息名(可变)function btnClick2() {    window.webkit.messageHandlers.showName.postMessage('xiao黄')}

native调用js


native方法

- (void)btnClick:(UIButton *)sender {    if (!self.WebView.loading) {        [self.WebView evaluateJavaScript:@"alertName('小红')" completionHandler:nil];    }}

js方法

function alertName(msg) {    //alert('你好 ' + msg + ', 我也很高兴见到你')    document.getElementById('name').innerHTML = '你好 ' + msg + ', 我也很高兴见到你'}

注意

崩溃或没有被释-描述

崩溃或没有被释放-解决

  • 崩溃情况1
ios10以下版本,scrollView.delegate 被引用时,退出控制器会导致崩溃。@property (nonatomic, strong) WKWebView *webView;- (void)viewWillDisappear:(BOOL)animated{    [super viewWillDisappear:animated];        self.webView.navigationDelegate = nil;    self.webView.UIDelegate = nil;    self.webView.scrollView.delegate = nil;}- (void)viewWillAppear:(BOOL)animated {        if (self.webView) {        self.webView.navigationDelegate = self;        self.webView.UIDelegate = self;        self.webView.scrollView.delegate = self;    }    }
  • 崩溃情况2:
kvo监测高度变化,不移除,会导致控制器不释放,另外移除了偶尔会被多次释放导致崩溃,具体解决办法暂时没有。- (void)dealloc{    @try {        [self.webView.scrollView removeObserver:self                                     forKeyPath:kWebViewContentSize                                        context:nil];    } @catch (NSException *exception) {        DLog(@"多次删除kvo报错了");    }}
  • 崩溃情况3:
js引用不释放。参考问题3,未验证不在这里列出。

原文:

转载于:https://my.oschina.net/u/3729367/blog/1593885

你可能感兴趣的文章
common digester-入门
查看>>
js - Array对象
查看>>
JAVA反射机制
查看>>
Hadoop集群(第10期)_MySQL关系数据库
查看>>
Linux命令学习总结-mkdir命令
查看>>
rocketMQ_4.1.0 编译好可以直接运行的版本:
查看>>
expect实现ssh自动登录
查看>>
最棒的50个开源博客-程序员必备
查看>>
Jquery table 添加行 删除行
查看>>
hive中文乱码问题
查看>>
hive写入数据的四种方式
查看>>
Python 连接 Mysql 操作异常
查看>>
linux 菜鸟人门命令
查看>>
XCode快捷键
查看>>
JAVA获取word表格中数据的方案
查看>>
Find 75000万像素和诺基亚的不是一个概念
查看>>
mysql处理添加外键时 error 150 问题
查看>>
企业如何针对用户数据进行有效保护
查看>>
Tomcat启动时报 java.lang.OutOfMemoryError: Java heap space
查看>>
Active Directory 基础回顾 (三)FSMO迁徙方式小总结
查看>>