博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UIWebView js OC简单交互
阅读量:6656 次
发布时间:2019-06-25

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

hot3.png

1.js调用oc 里边的方法

使用时候需要在html 页面的事件里边调用back 方法既可以执行oc 的goback 方法;

-(void)webViewDidFinishLoad:(UIWebView *)webView{    //iOS调用js    //首先创建JSContext 对象(此处通过当前webView的键获取到jscontext)    JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];        //js调用iOS    //第一种情况    //其中test1就是js的方法名称,赋给是一个block 里面是iOS代码    //此方法最终将打印出所有接收到的参数,js参数是不固定的 我们测试一下就知道    context[@"back"] = ^() {        //获取到back里携带 的参数//        NSArray *args = [JSContext currentArguments];//        for (id obj in args) {//            NSLog(@"%@",obj);//        }        [self goBack];    };}- (void)goBack{    /*     最新版本的iOS系统做了改动,现在(iOS9,Xcode 7.3,去年使用Xcode 6 和iOS 8没有线程问题)中测试,block中是在子线程,因此执行UI操作,控制台有警告,需要回到主线程再操作UI。     */    dispatch_async(dispatch_get_main_queue(), ^{        NSLog(@"aaaaaa");        [self.navigationController popViewControllerAnimated:YES];    });  }

2.oc 调用js 方法

方式一

NSString *jsStr = [NSString stringWithFormat:@"showAlert('%@')",@"这里是JS中alert弹出的message"];[_webView stringByEvaluatingJavaScriptFromString:jsStr];

注意:该方法会同步返回一个字符串,因此是一个同步方法,可能会阻塞UI。

方式二

继续使用JavaScriptCore库来做JS交互。

JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];NSString *textJS = @"showAlert('这里是JS中alert弹出的message')";[context evaluateScript:textJS];

重点:

stringByEvaluatingJavaScriptFromString是一个同步的方法,使用它执行JS方法时,如果JS 方法比较耗的时候,会造成界面卡顿。尤其是js 弹出alert 的时候。
alert 也会阻塞界面,等待用户响应,而stringByEvaluatingJavaScriptFromString又会等待js执行完毕返回。这就造成了死锁。
官方推荐使用WKWebViewevaluateJavaScript:completionHandler:代替这个方法。

转载于:https://my.oschina.net/iceTear/blog/748537

你可能感兴趣的文章
// FileStream 读取和写入一个文件,一点点读取,可以按照指定读取字节大小读取, //FileStream(文件夹名字,创建的模式,读取的形式)他是一个非静态类,所以用new创建...
查看>>
语法分析-C语言程序
查看>>
FluentData 轻量级.NET ORM持久化技术详解
查看>>
C++ If学习笔记(4)
查看>>
数据库
查看>>
(转)jqGrid的数据格式化
查看>>
Jquery Mobile表单
查看>>
Python内置函数
查看>>
实验1 命令解释程序的编写
查看>>
Ubunut18.04与Windows传输文件的方式
查看>>
正则表达式
查看>>
robotium做划屏操作函数scrollToSide ,坑爹
查看>>
EXTJS4-----前言
查看>>
php parse_str() 函数
查看>>
Windows程序设计_13_伤不起的书
查看>>
一些命令
查看>>
STM32 f407 温湿度采集报警
查看>>
Android AChartEngine 饼图渐变效果
查看>>
python基本语法(持续更新)
查看>>
Java单例模式
查看>>