先:WKUIDelegate,WKNavigationDelegate,WKScriptMessageHandler

   // 创建一个webiview的配置项

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

         // Webview的偏好设置

         //.WKPreferences()

         // 设置偏好设置

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

         configuretion.preferences.minimumFontSize = ;

         configuretion.preferences.javaScriptEnabled = true;

         configuretion.processPool = [[WKProcessPool alloc]init];

         // 通过js与webview内容交互配置

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

         [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

         //OC注册供JS调用的方法

         [ configuretion.userContentController addScriptMessageHandler:self name:@"ABC"];

         // 默认是不能通过JS自动打开窗口的,必须通过用户交互才能打开

         configuretion.preferences.javaScriptCanOpenWindowsAutomatically = NO;

         _wkwebView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:configuretion];//self.view.bounds

         [_wkwebView goBack];

         [_wkwebView goForward];

         _wkwebView.navigationDelegate = self;

         _wkwebView.UIDelegate = self;

         NSURL *url = [NSURL URLWithString:urlStr];  //测试本地H5

         NSURLRequest *request = [NSURLRequest requestWithURL:url];

         [_wkwebView loadRequest:request];

再:

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

     // userContentController 注册message的WKUserContentController;
// message:js传过来的数据
// id body:消息携带的信息 Allowed types are NSNumber, NSString, NSDate, NSArray, NSDictionary, and NSNull.
// NSString *name;//消息的名字 如aaa
//message.name js发送的方法名称 if([message.name isEqualToString:@"ABC"]){ NSString * body = [message.body objectForKey:@"body"]; //在这里写oc 实现协议的native方法 } }
 前端h5代码:前端需要用 window.webkit.messageHandlers.注册的方法名.postMessage({body:传输的数据} 来给native发送消息

 例如:

 function secondClick() {

     window.webkit.messageHandlers.aaa.postMessage({body: 'call js alert in js'});

 }

 **重要 如果注册了方法    [userContentController addScriptMessageHandler:self  name:@“aaa"];

 会导致hangler一直被引用 导致不走Delloc web页面无法释放 所以要在-(void)viewDidDisappear:(BOOL)animated中将messageHandler移除

     [userContentController removeScriptMessageHandlerForName:@“aaa"]; 关闭web页时会释放内存。

WKwebView与JS交互(h5主动)的更多相关文章

  1. ios WKWebView 与 JS 交互实战技巧

    一.WKWebView 由于Xcode8发布之后,编译器开始不支持iOS 7了,这样我们的app也改为最低支持iOS 8.0,既然需要与web交互,那自然也就选择使用了 iOS 8.0之后 才推出的新 ...

  2. WKWebView与Js交互

    首先打开webstorm,将最下面h5拷贝到html中.然后导入工程 #define kMessageHandlerName @"mymobile" 1.创建配置类 - (WKWe ...

  3. WKWebView与JS交互,UIWebView+JavascriptCore和JS交互

    最近一直在做有关Swift和JavaScript交互的程序,所以有关UIWebView和WKWebView在使用上的差别在此总结下: UIWebView: (1)创建 var webView: UIW ...

  4. WKWebView与js交互中产生的内存泄漏

    最近开发中突然发现富文本帖子详情内存没有释放掉,找了好久问题都没找到,终于今天发现了问题,先上一点代码片段 WKWebViewConfiguration *configuration = [[WKWe ...

  5. iOS(WKWebView)OC与JS交互 之三

      随着H5功能愈发的强大,没进行过混合开发的小伙们都不好意思说自己能够独立进行iOS的app开发,在iOS7操作系统下,常用的native,js交互框架有easy-js,WebViewJavascr ...

  6. iOS 交互h5 - WKWebView

    众所周知,UIWebView存在内存问题,也就是当加载一个UIWebView时,内存会一直上升趋势无法得到释放.这样在使用UIWebView进行h5交互开发时会有很大的问题. 因而苹果增加了一个新的类 ...

  7. WKWebView新特性及JS交互

    引言 一直听说WKWebView比UIWebView强大许多,可是一直没有使用到,今天花了点时间看写了个例子,对其API的使用有所了解,为了日后能少走弯路,也为了让大家更容易学习上手,这里写下这篇文章 ...

  8. iOS(UIWebView 和WKWebView)OC与JS交互 之二

    在iOS应用的开发过程中,我们经常会使用到WebView,当我们对WebView进行操作的时候,有时会需要进行源生的操作.那么我记下来就与大家分享一下OC与JS交互. 首先先说第一种方法,并没有牵扯O ...

  9. UIWebView和WKWebView的使用及js交互

    UIWebView和WKWebView的使用及js交互 web页面和app直接的交互是很常见的东西,之前尝试过flex和js的相互调用以及android和js的相互调用,却只有ios没试过,据说比较复 ...

随机推荐

  1. [转] ACM中国国家集训队论文集目录(1999-2009)

    国家集训队1999论文集 陈宏:<数据结构的选择与算法效率——从IOI98试题PICTURE谈起>来煜坤:<把握本质,灵活运用——动态规划的深入探讨>齐鑫:<搜索方法中的 ...

  2. C语言指针变量作为函数参数

    0x01 指针变量作为函数参数的作用是:将一个变量的地址传送到另一个函数中. 0x02 简单的例子:虽然都能实现功能,但意义不同. 正确的写法: #include <stdio.h> vo ...

  3. arcgis将图片转成shp地图

    打开arcMap 1.右键[图层]-[属性]-[坐标系]-[地理坐标系]-双击"WGS 1984" 2.右键[图层]-[添加数据],打开图片文件-Band_2 3.右键图片-[属性 ...

  4. IAR调节字体大小

    在主面板上点击tools->Options,然后点开Editor,选择下面的Colors and Fonts选项,最后选右上方的Font,选择要设置的字体就OK了.

  5. mysql日志开启和查看

    mysql日志开启和查看. 找到mysql根目录下的my.ini文件,打开在下面插入 log-bin=mysql-bin binlog_format=mixed 然后重启mysql. 在dos端登录m ...

  6. nodejs(1)

    node.js 是一个让javascript运行在服务端的开发平台 node.js的环境部署 1.下载安装包 https://nodejs.org/en/ 安装后 打开cmd的dos窗口 运行node ...

  7. maven更新远程仓库速度太慢解决方法

    1.maven在更新下载jar包的时候,因为jar包默认是从国外服务器上下载的,所以速度特别慢 2.通过设置镜像的方法加快jar包下载 3.在maven安装目录下,/config/settings.x ...

  8. C# 标准差计算

    if (numberList.Any()) { exEntity.MinValue = numberList.First().NumberValue.ToString(); exEntity.MaxV ...

  9. 《跑跑跑》(五)——添加障碍物,Tiled障碍层的使用

    [转]http://blog.csdn.net/u010778159/article/details/44036365 首先利用TiledMap在原来的地图上添加上障碍物,先新建两个图层,分别叫bar ...

  10. C#判断PC是否支持触摸屏

    C#判断PC是否支持触摸屏 添加引用PresentationFrameworkSystem.Windows.SystemParameters.IsTabletPC 使用win32api [csharp ...