OC與JS交互

以前一直是通過攔截Url的方式來進(jìn)行OC與JS的交互,也一直知道蘋果在iOS7的時(shí)候出了一個(gè)JavaScriptCore框架,但一直沒有使用。今天打算學(xué)習(xí)一下,并記錄供以后翻閱。

1.要引入頭文件

#import <JavaScriptCore/JavaScriptCore.h>

2.自定義協(xié)議JSDelegate,必須要遵守JSExport這個(gè)協(xié)議

@protocol JSDelegate <JSExport>

- (void)result:(NSString *)msg;

@end

3.在UIWebview的回調(diào)方法- (void)webViewDidFinishLoad:(UIWebView *)webView 中獲取JSContext上下文,然后再注入橋梁對(duì)象名為Custom,承載的對(duì)象為self即為此控制器,控制器遵守此自定義協(xié)議實(shí)現(xiàn)協(xié)議中對(duì)應(yīng)的方法

#pragma mark - UIWebViewDelegate

- (void)webViewDidFinishLoad:(UIWebView *)webView {

NSLog(@"webViewDidFinishLoad");

self.jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

self.jsContext[@"Custom"] = self;

[self.jsContext setExceptionHandler:^(JSContext *context, JSValue *value) {

context.exception = value;

NSLog(@"異常信息: %@", value);

}];

}

#pragma mark - JSDelegate

- (void)result:(NSString *)msg {

NSLog(@"%@", msg);

JSValue *callback = self.jsContext[@"callback"];

[callback callWithArguments:nil];

}

這樣基本上OC就可以跟JS來交互了,注意自定義協(xié)議的方法名稱要與web前端定義的一致,因?yàn)樵趙eb前端是通過橋梁對(duì)象名Custom.result(msg)來調(diào)用的,OC向JS傳值是通過JSValue的callWithArguments方法來進(jìn)行的,具體請(qǐng)查看完整Demo。

Github地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 隨著H5技術(shù)的興起,在iOS開發(fā)過程中,難免會(huì)遇到原生應(yīng)用需要和H5頁面交互的問題。其中會(huì)涉及方法調(diào)用及參數(shù)傳值等...
    Chris_js閱讀 3,236評(píng)論 1 8
  • OC與JS交互之JavaScriptCore 本文摘抄自:https://hjgitbook.gitbooks.i...
    大沖哥閱讀 1,107評(píng)論 0 1
  • 這套協(xié)議在OC的Webview里面主要采用delegate的寫法,一般與前端交互不使用第三方框架的情況下,...
    沒有方向的石頭閱讀 2,778評(píng)論 2 1
  • 進(jìn)入15年以后,在我們天朝越來越流行混編!尤其是騰訊的 變態(tài)APP微信小程序一出,撐起了混編的半邊天! 廢話不多說...
    白水灬煮一切閱讀 1,322評(píng)論 0 2
  • 第一縷晨曦穿透窗子, 睜開惺忪的明眸, 伸展修長的雙臂, 手捧美麗的心靈, 縱想觸碰遠(yuǎn)方。 你雖不在近旁, 確時(shí)時(shí)...
    大浪淘沙拾貝閱讀 527評(píng)論 13 29

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