1.iOS与web交互的四种方式
(1).拦截URL(都适用)
优点:兼容性最好的方式,iOS7之前的只能使用这种方式,不需要等到页面加载完就能实现OC调用JS或JS调用OC
缺点:需要频繁的解释字符串得到相应的方法名和传值,且调用的方法也不能进行回调传值。
(2).JavaScriptCore (仅适用于UIWebView,iOS7+)
优点:比拦截URL使用更方便,效率更高
缺点:必须等到页面加载完成才能实现OC调用JS
(3).WKScriptMessageHandler (仅适用于 WKWebView,iOS8+)
WKWebView有两个代理,一个是navigationDelegate,负责页面跳转相关,另一个是UIDelegate,负责UI事件相关。
(4).WebViewJavaScriptBridge (都适用)
使用简单,就是在OC环境和Javascript环境各自保存一个相互调用的bridge对象,每一个调用之间都有id和callbackid来找到两个环境对应的处理。但是这个框架本身有bug,好在已经有解决办法,只是作者一直没有更新。WebViewJavaScriptBridge的天然坑
2.userAgent
一般会在本身的userAgent基础上拼接一些会经常用到的信息,比如平台(ios,android),用户id等
NSString *userAgent = [[[UIWebView alloc] init] stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];//取出系统的userAgent
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent" : customUserAgent}];//替换成自定义的userAgent
3.WKWebview
优点:更多的支持H5特性,更流畅(高达60fps的刷新率),内置手势,增加了加载的进度属性,更细致的代理。
缺点:WKWebView的坑(白屏问题,cookie问题,不支持URLProtocal拦截)
4.iOS与web交互的问题