我們接著來聊一聊JS與OC交互的那些事兒桶略。
上一篇只介紹的了JS調(diào)用OC的方法:
JS與OC交互大總結之一 JS調(diào)用OC
這一篇聊聊OC調(diào)用JS的方法:
示例代碼:
LZBWebViewWithJSInteractive github下載鏈接
OC調(diào)用JS的方法###
第一種:
利用WebView的stringByEvaluatingJavaScriptFromString方法調(diào)用JS代碼
第二種:
利用系統(tǒng)框架<JavaScriptCore/JavaScriptCore.h>的JSContext 類的evaluateScript調(diào)用JS的方法
詳細解說###
1、利用stringByEvaluatingJavaScriptFromString方法绍在,這個比較簡單熟吏,我們也在經(jīng)常使用荒吏,就是把需要的JS代碼寫入到WebView的JS運行環(huán)境中
NSString *param = @"OC調(diào)用JS參數(shù)http://www.reibang.com/users/d21698127416/latest_articles"; //寫入JS的參數(shù)
//調(diào)用JS的callJS方法绒瘦,并且傳入param參數(shù)蚪腋,這里要注意參數(shù)使用的是單引號‘’
NSString *js = [NSString stringWithFormat:@"callJS('%@')",param];
//把JS傳入WebView的運行環(huán)境中
NSString *string = [self.webView stringByEvaluatingJavaScriptFromString:js];
JS端的核心代碼:
<script type="text/javaScript">
function callJS(param) //函數(shù)實現(xiàn)callJS
{
alert(param);
}
</script>
2、利用系統(tǒng)框架實現(xiàn)
使用的步驟:
① 加載網(wǎng)頁,我這里是示例是加載本地的html
NSString *path = [[NSBundle mainBundle] pathForResource:@"OCtoJStwoIndex.html" ofType:nil];
NSURL *localURL = [[NSURL alloc]initFileURLWithPath:path];
[self.webView loadRequest:[NSURLRequest requestWithURL:localURL]];
② 獲取webView的運行環(huán)境對象,其實我們很多操作都是圍繞著它來的
//獲得WebView的運行環(huán)境的對象
JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
③ 定義調(diào)用JS方法的字符串荒澡,如果有參數(shù)可以傳入?yún)?shù)
//調(diào)用方法(注意:這里是JS里面的定義的方法)
NSString *callJSstring = @"sendJSString('參數(shù):OC call JS test 子木')";
注意:參數(shù)還是單引號
④ 利用JSContext的對象方法- (JSValue *)evaluateScript:(NSString *)script;把JS的字符串寫入到運行環(huán)境中
[context evaluateScript:callJSstring];
這樣就利用蘋果框架實現(xiàn)OC調(diào)用JS报辱,比較簡單吧!
小結一下###
OC調(diào)用JS兩個方法:
1单山、stringByEvaluatingJavaScriptFromString方法
2碍现、 JSContext 的 (JSValue *)evaluateScript:(NSString *)script方法
最后贈言###
star 是對我最大的鼓勵