Objective-C與JavaScript交互

原理圖

  • 簡言
    JSContext的實例對象可以橋接兩個執(zhí)行環(huán)境,可以通過該實例使兩個環(huán)境進行交集(類似橋梁般的存在,又稱上下文對象)

依賴系統(tǒng)庫

<JavaScriptCore/JavaScriptCore.h>

Objective-C向JavaScript傳值

  • Objective-C實現(xiàn)內(nèi)容
//在webViewDidFinishLoad:代理方法里獲取上下文,如有需要可進行強引用
JSContext *jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

//在需要傳值的位置使用上下文進行傳值
NSString *userId = [NSString stringWithFormat:@"%@",userManager.userId];
NSString *token = [NSString stringWithFormat:@"%@",userManager.token];
NSString *textJS = [NSString stringWithFormat:@"iOSGiveValue('%@','%@')",userId,token];
[jsContext evaluateScript:textJS];
  • JavaScript實現(xiàn)內(nèi)容
//在寫樣式的位置實現(xiàn)函數(shù)
function giveValue(value){
   alert(value);
}

JavaScript向Objective-C傳值

  • JavaScript實現(xiàn)內(nèi)容
//在需要的位置調(diào)用Objective-C的函數(shù)
function javaScriptFunction(){
   giveValue("我是JavaScript的值,傳到了Objective-C里");
}
  • Objective-C實現(xiàn)內(nèi)容
//在webViewDidFinishLoad:代理方法里獲取上下文,如有需要可進行強引用
JSContext *jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

//等待JavaScript調(diào)用
jsContext[@"giveValue"] = ^(NSString *value){
    NSLog(@"%@", value);
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容