當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
js(javascript)与OC(Objective-C)交互
生活随笔
收集整理的這篇文章主要介紹了
js(javascript)与OC(Objective-C)交互
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
實質(zhì)上oc與js的通信交互就是發(fā)送消息,也即函數(shù)調(diào)用,iOS7以后官方公布JavaScriptCore framework中很方便我們對他們之間的相互調(diào)用。在以前我們只能通過UIWebView的UIWebViewDelegate協(xié)議來實現(xiàn).
| 1 | - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; |
或者
| 1 | - (void)webViewDidStartLoad:(UIWebView *)webView; |
- oc–>js stringByEvaluatingJavaScriptFromString,其參數(shù)是一NSString 字符串內(nèi)容是js代碼(這又可以是一個js函數(shù)、一句js代碼或他們的組合),當js函數(shù)有返回值或一句js代碼有值返回可通過stringByEvaluatingJavaScriptFromString的返回值獲取
- js–>oc 利用webView的重定向原理(即重新在js中指定document.location的值,此為一url),只要在這個url字符串中按自定義的規(guī)則指定好所需調(diào)用oc中的函數(shù)和參數(shù),然后通過OC中的shouldStartLoadWithRequest函數(shù)去捕獲處理請求。
一 JS調(diào)用OC
js調(diào)用iOS分兩種情況
js里面直接調(diào)用方法
js里面通過對象調(diào)用方法
js里面直接調(diào)用方法
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | - (void)webViewDidStartLoad:(UIWebView *)webView{ //首先創(chuàng)建JSContext 對象(此處通過當前webView的鍵獲取到j(luò)scontext) JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; //其中g(shù)etCurrentUser就是js的方法名稱,賦給是一個block 里面是iOS代碼 context[@"getCurrentUser"] = ^() { //在block中寫OC代碼 return [[NSUserDefaults standardUserDefaults]objectForKey:@"MYJSANDOC"]; }; context[@"encodeParam"] = ^() { NSArray *args = [JSContext currentArguments]; NSString *param = [NSString stringWithFormat:@"%@",args[0]]; NSString *result = [[[YXBaseRequestManager alloc]init]encryptUseAES:param key:@"1%7jhs#Zjasd&tr*"]; return result; }; } |
js里面通過對象調(diào)用方法
在這個方法中我們需要使用到?JSExport
JSExport是一個協(xié)議,自定義協(xié)議后,里面的聲明變量等會對JS開放,我們即可調(diào)用。
首先我們要自定義一個協(xié)議,添加頭文件#import <JavaScriptCore/JavaScriptCore.h>,繼承自NSObject
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
在.m中實現(xiàn)
| 1 2 3 4 5 6 7 8 9 10 11 |
在weibview加載完成之后調(diào)用
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | -(void)webViewDidFinishLoad:(UIWebView *)webView { //網(wǎng)頁加載完成調(diào)用此方法 //首先創(chuàng)建JSContext 對象(此處通過當前webView的鍵獲取到j(luò)scontext) JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; //第二種情況,js是通過對象調(diào)用的,我們假設(shè)js里面有一個對象 testobject 在調(diào)用方法 //首先創(chuàng)建我們新建類的對象,將他賦值給js的對象 JSObjectText *text=[JSObjectText new]; context[@"testobject"]=text; //同樣我們也用剛才的方式模擬一下js調(diào)用方法 NSString *jsStr=@"testobject.JSObjectTextPush()"; [context evaluateScript:jsStr]; } |
二 OC調(diào)用JS
方法很簡單,在加載webview后,通過點擊事件,或者 返回值,調(diào)用stringByEvaluatingJavaScriptFromString來實現(xiàn)調(diào)用JS代碼
| 1 2 3 4 5 6 7 8 9 10 | /* * 點擊事件 * 調(diào)用javaScript的方法postStr()并取得返回值 * 輸出返回值到控制臺 */ -(void)ocFromJs:(id)sender { NSString *str = [self.webview stringByEvaluatingJavaScriptFromString:@"postStr();"]; NSLog(@"JS返回值:%@",str); } |
轉(zhuǎn)載于:https://www.cnblogs.com/jgCho/p/5882705.html
總結(jié)
以上是生活随笔為你收集整理的js(javascript)与OC(Objective-C)交互的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: erlang mnesia数据库简单应用
- 下一篇: HDU5900 QSC and Mast