APP某个页面嵌入H5页面,当前H5页面拥有登陆状态。在此之前,用户进入本页面,即使用户在登陆状态,依然显示未登陆,所以需要把APP的登陆状态传给H5,达到免登陆目的。
下面的截图是我们APP的活动页面
目前主要的JS与OC相互调用方式主要有如下6种:
- 在JS 中做一次URL跳转,然后在OC中拦截跳转。(这里分为UIWebView 和 WKWebView两种,UIWebView兼容iOS 6)
- 利用WKWebView 的MessageHandler。
- 利用系统库JavascriptCore,来做相互调用。(iOS 7推出)
- 利用第三方库WebViewJavascriptBridge。
- 利用第三方cordova库,以前叫PhoneGap。(这是一个库平台的库)
- 当下盛行的React Native。
初步考虑,App兼容iOS7选择JavascriptCore方式,App只兼容iOS8以上,可以采用WKWebView,并使用MessageHandler方式。
因为我们前端H5采用的是把登陆状态token存放在session Storage里面,采用第二种方式是最简洁方便的。可能有些前端是从URL传登陆状态值的,那这种方式就更简单了,只要把请求URL拼接上APP登陆token(以上两种情况需要后端把APP和H5端登陆信息做统一接口才能最终达到目的。)
好了废话不多说,上代码
先创建webview然后进行偏好设置configuration
在代理里面对H5页面的登陆按钮进行拦截
下面代码是修改title的kvo,不需要的可以忽略
然后是通知的回调
最后记得在dealloc里面进行销毁通知和KVO