UIWebView 相比于 WKWebView 的使用上会简单很多。...②使用 JSContext 上下文调用 JS 函数 第一种方法使用相对简单,但复杂业务可能无法实现。 1.1.1 OC 拼接 JS 字符串调用 JS 方法 JS 代码如下: <!...*context, JSValue *exception) { NSLog(@"%@",exception); }; } 2、WKWebView OC 与 JS 交互 WKWebView...// 创建一个新的 WebView 视图时调用 - (nullable WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration...该库支持 UIWebView和WKWebView。使用比较简单,上手容易。
二、思路概括 步骤一、 WKWebView 加载本地的一个 H5 页面,然后,在按钮的点击事件里将需要做的耗时事情告诉 iOS 原生 步骤二、iOS 原生收到消息后,创建一个原生下的 JSContext...步骤三、JSContext 对象加载本地写好的 JS 文件,然后通过步骤一传进来的参数直接异步调用 JS 文件下对应的 function。...2、创建有简单耗时任务 JS 文件 main.js 这个 JS 文件就是 JSContext (原生内可提供 JS 虚拟环境的对象)对象要加载 JS 文件,用它来模拟一些耗时的任务。...JSContext 执行 main.js 方法 这里的 name 参数就是 main.js 的 doNework 方法,它其实是由 H5 界面传过来的,这个下面会说。...WKWebView 代理方法 对比一下 H5 文件下的 loadAction 方法, 1、对应 WKWebView 代理方法里的 name 标识 2、对应 WKWebView 代理方法里的 body
JSContext *JSCtx = [[JSContext alloc] init]; // 3. 通过webView的获取JSContext。...WKWebView 与JavaScriptCore 关于WKWebView 与JavaScriptCore,由于WKWebView 不支持通过如下的KVC的方式创建JSContext: JSContext...context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; 那么就不能在WKWebView...而且,WKWebView中有OC 和JS交互的方式,更easy 、更简洁,因此也用不着使用JavaScriptCore。...WKWebView中如何实现OC与JS交互可以看前面这篇文章:iOS下JS与OC互相调用(三)--MessageHandler UIWebView利用JavaScriptCore来实现交互的示例工程:JS_OC_JavaScriptCore
一、前言 近日,有朋友问我关于WKWebView与JS的交互问题,可我之前一直使用的是UIWebView,也不曾做过WKWebView的交互啊!...三、WKWebView的代理方法 /*!...JSContext 的关系 JSVirtualMachine 实例表示用于 JavaScript 执行的独立环境。...因为当我们获取 JSContext 时,获取到的 JSContext 从属于一个 JSVirtualMachine。...每个 JavaScript 上下文(JSContext 对象)都属于一个 JSVirtualMachine。
分别使用 UIWebView 以及 WKWebView 实现效果如下: JavaScriptCore 类库里面有12个类(还有两个是负责导入相关类的头文件以及一个关于WebKit的宏定义);在基本的交互过程中...,其实最常使用的有三个:JSContext、JSValue、JSExport JSContext 简单的理解为执行JavaScript的一个环境,就好像我们在绘制View时候需要获取的CGContext...UIWebViewDelegate 在UIWebViewDelegate 中的webViewDidFinishLoad() 方法中对JSContext进行截取,并执行操作: WKWebView 首先有一点...,WKWebView是获取不JSContext的,那咋办?...没关系,WKWebView提供给了我们非常便利的交互,不详细说了!
3、把实现代理的对象塞给JSContext自定义对象vueProject(名称随意,需要和JS定义一致) - (void)viewDidLoad { [super viewDidLoad];...*jsContext = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];...// 原生界面实现方法的对象 JSObjectManager *object = [[JSObjectManager alloc] init]; // 把对象塞给JSContext...的app对象,js端使用app开头调用 如 app.test() 、 app.testFunction() jsContext[@"vueProject"] = object; } 嗯,就这样...WKWebView中JS与Native进行交互
PR_AppDotNetAPIBaseURLString]]) { [self touchToDetail]; } [self invokeJS]; } - (void)invokeJS { JSContext...context[@"buyMembers"] = ^() { NSNumber *MemberCount = [[NSNumber alloc] init]; NSArray *args = [JSContext...currentArguments]; MemberCount = (NSNumber *)args[0]; JSValue *this = [JSContext currentThis...创建一个WKWebView 并加载 self.webView = [[WKWebView alloc]initWithFrame:CGRectMake(0, 20, kScreenWidth, kScreenHeight...:(WKNavigation *)navigation; // 当内容开始返回时调用 - (void)webView:(WKWebView *)webView didCommitNavigation:(
= [webViewvalueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; _jsContext[@"startFunction...currentContext]来获取当前的JSContext: */ [JSContextcurrentContext]; NSData *data = [(...= ^(JSContext *context,JSValue *exceptionValue) { context.exception = exceptionValue; //...- (void)webViewDidFinishLoad:(UIWebView *)webView{ NSLog(@"加载完成..."); JSContext *context = [_webView...附上利用WKWebView加载网页OC与JS的交互的地址: http://mp.blog.csdn.net/postedit/53541088
UIWebView自iOS2就有,WKWebView从iOS8.0(2014年9月WWDC)才有,毫无疑问,WKWebView相对UIWebVIew要优秀得多,主要表现在以下几点: 1,WKWebView...但WKWebView的内存超过系统分配给它的内存的时候,WKWebView浏览器就会崩溃白屏,但是APP不会crash(APP会收到系统通知,并且尝试去重新加载页面)。...以上介绍了WKWebView的优点,但是其也有以下缺点: 1,WKWebView需要iOS9及更高的版本,虽然WKWebView是在iOS8之后引入的,但是iOS8的版本存在重大限制,比如无法访问本地存储的文件...WKWebView的用法 ? WKWebView API WKWebView对象可以显示交互式Web内容,例如应用内浏览器。你可以使用WKWebView类将web内容嵌入到你的应用程序中。...5,使用WKWebView的流程如下: ?
WKWebView API WKWebView的头文件声明: // webview 配置,具体看下面 @property (nonatomic, readonly, copy) WKWebViewConfiguration...// 这个是决定是否Request - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction...navigation withError:(NSError *)error; // 这与用于授权验证的API,与AFN、UIWebView的授权验证API是一样的 - (void)webView:(WKWebView...*)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration...*)frame completionHandler:(void (^)(void))completionHandler; // 调用JS的confirm()方法 - (void)webView:(WKWebView
则可以在UIWebView加载url完成后,在其代理方法中添加要调用的share方法: - (void)webViewDidFinishLoad:(UIWebView *)webView { JSContext...JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext...官方推荐使用WKWebView的evaluateJavaScript:completionHandler:代替这个方法。...iOS下JS与OC互相调用(一)--UIWebView 拦截URL iOS下JS与OC互相调用(二)--WKWebView 拦截URL iOS下JS与OC互相调用(三)--MessageHandler...OC互相调用(四)--JavaScriptCore iOS下JS与OC互相调用(五)--UIWebView + WebViewJavascriptBridge iOS下JS与OC互相调用(六)--WKWebView
let contet:JSContext = JSContext() // 实例化 JSContext context.evaluateScript("function combine(firstName...具体步骤是将当前的 Class 转换为 Object 类型注入到 JSContext 中。 lazy var context: JSContext?...对于 UIWebview 可以直接获得当前 webview 的Context,但是 WKWebview 已经没有了直接获取 context 的接口,wkwebview 更推崇使用前文的 scriptMessageHandler...当然,获取 wkwebview 中的 context 也不是没有办法,可以通过 KVO 的 trick 方式来拿到。...JSContext let model = WXShareInterface() model.controller = self model.jsContext = self.jsContext
WKWebView主要涉及到以下类或协议,各部分可能互相依赖,文章按照apple文档的划分对每一个模块进行了详细的解释 WKWebView 配置和偏好 WKWebViewConfiguration WKPreferences...一个WKWebView对象显示交互式的web内容,比如在应用程序内的浏览器。...您可以使用WKWebView类来在应用程序中嵌入web内容,通过创建一个WKWebView对象,将其设置为视图,并发送一个请求来加载web内容。...从iOS 8.0和OS X 10.10开始,建议使WKWebView在应用程序中展示web内容,建议不要使用UIWebView或WebView。...创建一个新的WebView - (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration
let contet:JSContext = JSContext() // 实例化 JSContext context.evaluateScript("function combine(firstName...weak var jsContext: JSContext?...对于 UIWebview 可以直接获得当前 webview 的Context,但是 WKWebview 已经没有了直接获取 context 的接口,wkwebview 更推崇使用前文的 scriptMessageHandler...当然,获取 wkwebview 中的 context 也不是没有办法,可以通过 KVO 的 trick 方式来拿到。...JSContext let model = WXShareInterface() model.controller = self model.jsContext = self.jsContext
let contet:JSContext=JSContext()// 实例化 JSContext context.evaluateScript("function combine(firstName, ...weak var jsContext: JSContext? ...对于 UIWebview 可以直接获得当前 webview 的Context,但是 WKWebview 已经没有了直接获取 context 的接口,wkwebview 更推崇使用前文的 scriptMessageHandler...当然,获取 wkwebview 中的 context 也不是没有办法,可以通过 KVO 的 trick 方式来拿到。...JSContext let model = WXShareInterface() model.controller = self model.jsContext = self.jsContext
WKWebView 使用 WKUserContentController. UIWebView 原生的交互原理 通过一个 JSContext 获取 UIWebView 的 JS 执行上下文。..._jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; _jsContext.exceptionHandler...= ^(JSContext *context, JSValue *exception) { NSLog(@"%@",@"获取 WebView JS 执行环境失败了!")...; }; WKWebView 原生交互原理 通过 userContentController 把需要观察的 JS 执行函数注册起来。...WebViewJavaScriptBridge WebViewJavaScriptBridge 用于 WKWebView & UIWebView 中 OC 和 JS 交互。
在UIWebView下,可以使用 [[NSURLCache sharedURLCache] removeAllCachedResponses];//清除缓存 WKWebView清除cookies的方法...cookies]) { NSLog(@"%@", cookie); } 参考链接:http://stackoverflow.com/questions/31289838/how-to-delete-wkwebview-cookies
LSWebVC.h" #import "LSInterActive.h" @interface LSWebVC() @property (nonatomic,strong) JSContext...valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; self.context.exceptionHandler = ^(JSContext...但是ios8之后 苹果推出了 wkWebview 比uiwebview 占用内存更小,运行速度更快,现在献上 wkwebview的使用方法,供大家参考。...最近发现了wkwebview 这个是ios8之后出来的,就在#import 这个类里边就包含了这个wkwebview这个类,wkwebview继承于uiview 特点...self.wkWebView.loading) { if (sender.tag == 123) {//电话 [self.wkWebView evaluateJavaScript
1、WKWebView 白屏问题 WKWebView 自诩拥有更快的加载速度,更低的内存占用,但实际上 WKWebView 是一个多进程组件,Network Loading 以及 UI Rendering...2、WKWebView Cookie 问题 Cookie 问题是目前 WKWebView 的一大短板 2.1、WKWebView Cookie存储 业界普遍认为 WKWebView 拥有自己的私有存储,...WKWebView Cookie 问题在于 WKWebView 发起的请求不会自动带上存储于 NSHTTPCookieStorage 容器中的 Cookie。...3、WKWebView NSURLProtocol问题 WKWebView 在独立于 app 进程之外的进程中执行网络请求,请求数据不经过主进程,因此,在 WKWebView 上直接使用 NSURLProtocol...虽然 WKWebView 坑比较多,但是相对 UIWebView 在内存消耗、稳定性方面还是有很大的优势。尽管苹果对 WKWebView 的开发进度过于缓慢,但相信 WKWebView 才是未来。
1、WKWebView白屏问题 WKWebView自诩拥有更快的加载速度,更低的内存占用,但实际上WKWebView是一个多进程组件,Network Loading以及UI Rendering在其它进程中执行...2、WKWebView Cookie问题 Cookie问题是目前WKWebView的一大短板 2.1、WKWebView Cookie存储 业界普遍认为WKWebView拥有自己的私有存储,不会将Cookie...通过让所有WKWebView共享同一个WKProcessPool实例,可以实现多个WKWebView之间共享Cookie数据。...3、WKWebView NSURLProtocol问题 WKWebView在独立于app进程之外的进程中执行网络请求,请求数据不经过主进程,因此,在WKWebView上直接使用NSURLProtocol...尽管苹果对WKWebView的开发进度过于缓慢,但相信WKWebView才是未来。—>iOS 11 WKWebView 新特性
领取专属 10元无门槛券
手把手带您无忧上云