最近朋友讓做一個(gè)webApp和原生的代碼互調(diào),就順便查了一下資料 總結(jié)分享一個(gè)
從iOS7開始 蘋果公布了JavaScriptCore.framework 它使得JS與OC的交互更加方便了。
下面我們就簡(jiǎn)單了解一下這個(gè)框架
首先我導(dǎo)入framework
方法如下
點(diǎn)擊Linked Frameworks and Libraries 的添加后 選擇 JavaScriptCore.framework
選中JavaScriptCore.framework后 點(diǎn)擊右下角Add 添加完成
好 創(chuàng)建完成之后我們導(dǎo)入一下頭文件
[objc]view plaincopy
#import?
點(diǎn)進(jìn)去 會(huì)看到如下幾個(gè)方法
#import"JSContext.h"
#import"JSValue.h"
#import"JSManagedValue.h"
#import"JSVirtualMachine.h"
#import"JSExport.h"
這些方法我們等會(huì)再細(xì)講
下來(lái)我們創(chuàng)建一個(gè)UIWebView ?用來(lái)測(cè)試
創(chuàng)建UIWebView
[objc]view plaincopy
UIWebView*myWebView;
初始化,添加,打開網(wǎng)址
[objc]view plaincopy
//初始化webview
myWebView=[[UIWebViewalloc]initWithFrame:CGRectMake(0,22,?[UIScreenmainScreen].bounds.size.width,?[UIScreenmainScreen].bounds.size.height-22)];
myWebView.delegate=self;
//添加webview到當(dāng)前viewcontroller的view上
[self.viewaddSubview:myWebView];
//網(wǎng)址
NSString*httpStr=@"https://www.baidu.com";
NSURL*httpUrl=[NSURLURLWithString:httpStr];
NSURLRequest*httpRequest=[NSURLRequestrequestWithURL:httpUrl];
[myWebViewloadRequest:httpRequest];
運(yùn)行效果如下
下面我們來(lái)實(shí)現(xiàn)UIWebView的幾個(gè)代理方法
首先我們看下它的代理方法
[objc]view plaincopy
@protocolUIWebViewDelegate?
@optional
-?(BOOL)webView:(UIWebView*)webViewshouldStartLoadWithRequest:(NSURLRequest*)requestnavigationType:(UIWebViewNavigationType)navigationType;
-?(void)webViewDidStartLoad:(UIWebView*)webView;
-?(void)webViewDidFinishLoad:(UIWebView*)webView;
-?(void)webView:(UIWebView*)webViewdidFailLoadWithError:(NSError*)error;
@end
每個(gè)方法的作用等會(huì)在帶里面做注釋
首先我們添加協(xié)議
[objc]view plaincopy
@interfaceViewController?()
實(shí)現(xiàn)代理方法
[objc]view plaincopy
#pragma?mark?--webViewDelegate
-(BOOL)webView:(UIWebView*)webViewshouldStartLoadWithRequest:(NSURLRequest*)requestnavigationType:(UIWebViewNavigationType)navigationType
{
//網(wǎng)頁(yè)加載之前會(huì)調(diào)用此方法
//retrun?YES?表示正常加載網(wǎng)頁(yè)?返回NO?將停止網(wǎng)頁(yè)加載
returnYES;
}
-(void)webViewDidStartLoad:(UIWebView*)webView
{
//開始加載網(wǎng)頁(yè)調(diào)用此方法
}
-(void)webViewDidFinishLoad:(UIWebView*)webView
{
//網(wǎng)頁(yè)加載完成調(diào)用此方法
}
-(void)webView:(UIWebView*)webViewdidFailLoadWithError:(NSError*)error
{
//網(wǎng)頁(yè)加載失敗?調(diào)用此方法
}
每個(gè)方法是什么時(shí)候調(diào)用都在注釋里面
下來(lái)我們先嘗試用oc調(diào)用一下js方法
[objc]view plaincopy
-(void)webViewDidFinishLoad:(UIWebView*)webView
{
//網(wǎng)頁(yè)加載完成調(diào)用此方法
//首先創(chuàng)建JSContext?對(duì)象(此處通過(guò)當(dāng)前webView的鍵獲取到j(luò)scontext)
JSContext*context=[webViewvalueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
NSString*alertJS=@"alert('test?js?OC')";//準(zhǔn)備執(zhí)行的js代碼
[contextevaluateScript:alertJS];//通過(guò)oc方法調(diào)用js的alert
}
執(zhí)行效果如下:
好了,我們已經(jīng)實(shí)現(xiàn)了iOS 調(diào)用js
原文地址:http://blog.csdn.net/lwjok2007/article/details/47058101
iOS和JS互調(diào)(二):http://blog.csdn.net/lwjok2007/article/details/47058795
IOS和JS通過(guò)橋接的方式進(jìn)行互調(diào):http://www.cocoachina.com/ios/20150814/12985.html