WKWebView与js交互
来源:互联网 发布:手机破解软件资源 编辑:程序博客网 时间:2024/05/22 02:21
项目里使用的一直是UIWebView,但是每次打开界面的时候都会内存飙升,心塞!经过两天努力终于把UIWebView替换成了WKWebView,现在内存基本上不会有浮动了,哈哈哈哈哈哈哈!
代码如下:
OC端要改的东西:
1.首先要进行js注入,把web端需要的东西注入到js里,如果web不需要的话,就不用注入了,写在viewDidLoad里
NSString *js = [NSString stringWithFormat:@"var WKApp={initUrl:function(){return'%@'},initVersion:function(){return'%@'},initDeviceId:function(){return'%@'},initHeaderVersion:function(){return'%@'}};",@"http://www.bai.com",@"2.1.0",@"sljdfljsjddjfajsei",@"2.3.0"]; WKUserScript *userScript = [[WKUserScript alloc] initWithSource:js injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:true]; WKUserContentController *userContentController = [[WKUserContentController alloc] init]; [userContentController addUserScript:userScript]; WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init]; configuration.preferences.minimumFontSize = 10; configuration.preferences.javaScriptEnabled = YES; // 默认是不能通过JS自动打开窗口的,必须通过用户交互才能打开 configuration.preferences.javaScriptCanOpenWindowsAutomatically = NO; configuration.userContentController = userContentController;
2.点击web上的按钮,要调起原生界面,
//添加消息 [self.config.userContentController addScriptMessageHandler:self name:@"openWebUrl"];//打开一个新界面的消息
//接受消息,在代理里面判断是哪个消息,并做响应处理-(void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{ NSLog(@"web-----%@-----body:%@",message.body,message.body); if ([message.name isEqualToString:@"openWebUrl"]) { //打开一个新界面 }}
//当界面消失的时候,把添加的消息移除-(void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; [self.webView.configuration.userContentController removeScriptMessageHandlerForName:@"openWebUrl"];}
js端要做的处理
* js是创建了一个新的方法,名字是WKApp,就是oc端的js注入的那个字符串里面的方法,然后oc注入,js获取这些信息,就可以使用了。
* 播放音频没声音,要在配置里关闭。
configuration.mediaPlaybackRequiresUserAction = NO;
发生的错误
1.调试的时候出错,报JavaScript-400(具体忘了是400还是404了),出现这个原因是因为js注入的时候那个字符串不对,字符串是一个方法的整个代码,特别容易出错,一个大括号或者逗号没写都会出现错误,一定要慎重。
2.在多级界面的时候,返回到上一个界面有时候会发生一个错误:Error Domain=NSURLErrorDomain Code=-999 “(null)” ,发生这个错误主要是因为一个请求还没有加载完成,又发起了一个新的请求,修改如下:
//网页加载失败- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error{ NSLog(@"---网页加载失败---%@",error); if (error.code == NSURLErrorCancelled) { return; } }
说明
其他的,暂时还没有发现什么问题,会持续更新的~
阅读全文
1 0
- WKWebView与js交互
- WKWebView与JS交互
- WKWebView与JS交互
- WKWebView与js交互
- WKWebView与JS交互
- WKWebView与js交互
- WKWebView 与 JS 交互
- WKWebView与js交互
- oc与js交互-----WKWebView
- WKWebView与JS的交互
- WKWebView 与JS的交互
- wkwebview与js的交互
- iOS WKWebView 与 js 交互
- iOS WKWebView与JS交互
- WKWebView OC与js的交互
- WKWebView的简单使用,与js交互
- UIWebView、WKWebView与js的交互
- WKWebView与js交互之完美解决方案
- linux中文件查找locate,whereis,find介绍
- solr 装载 hanlp
- mysql的加密函数
- 主线程中延时启动dialog
- linux网络编程一:主机字节序与网络字节序的的判断
- WKWebView与js交互
- Hello GitHub
- linux下的EDA——VCS使用
- ICE的应用
- boolan面向对象编程 第一周笔记
- 剑指offer--复杂链表的复制
- spring学习笔记三
- 堆排序
- 测试垃圾回收次数