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