JS與native 交互簡(jiǎn)單應(yīng)用

JS與native 交互簡(jiǎn)單應(yīng)用

先提供一下 demo 下載地址:https://github.com/xiaoma0304/WebDemo.git

一、objectiveC 語(yǔ)法簡(jiǎn)介

http://www.runoob.com/ios/ios-objective-c.html

二围苫、簡(jiǎn)易項(xiàng)目瀏覽器搭建

新建項(xiàng)目步驟:
1>


DraggedImage.png

2>


2222.png

3>
33333.png

4>
4444.png
  1. 建立一個(gè)小的瀏覽器即webview
    關(guān)鍵代碼如下:
// context 上下文也可以在此處獲取裤园,開(kāi)始加載網(wǎng)頁(yè)調(diào)用此方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    return YES;
}
// 網(wǎng)頁(yè)加載完成會(huì)執(zhí)行此方法
- (void)webViewDidFinishLoad:(UIWebView *)webView {
    self.jsbinding_context = [_webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    [self initBinding];
} 
/** 懶加載 */
- (UIWebView *)webView {
    if(!_webView) {
        _webView = [[UIWebView alloc]init];
        _webView.delegate = self;
        NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
        NSURL* url = [NSURL  fileURLWithPath:path];
//        NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];
        NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url];
        [_webView loadRequest:request];
    }
    return _webView;
}

三、js和native交互聯(lián)調(diào)工具認(rèn)識(shí):

iOS 與 js 交互聯(lián)調(diào)工具必須為safari剂府,首先我們?cè)O(shè)置一下safari 如下設(shè)置調(diào)出開(kāi)發(fā)者工具


a'a'a'a.png

bbbbb.png

OK這樣我就可以在工具欄中多了一個(gè) 【開(kāi)發(fā)】 選項(xiàng)拧揽,然后我們編譯我們的項(xiàng)目就可以找到相應(yīng)的網(wǎng)頁(yè),跟調(diào)試普通網(wǎng)頁(yè)相同腺占,只是網(wǎng)頁(yè)現(xiàn)在在手機(jī)上


DraggedImage-2-1.png

四淤袜、js 與 native 原生交互

1> js 調(diào)用oc 方法

a> 用block 的方式
self.jsbinding_context[@"multiply"] = ^(NSInteger a, NSInteger b){
        return a * b;
 };
b> JSExport 方式

binding類(lèi) .h 文件

#import <Foundation/Foundation.h>
#import <JavaScriptCore/JavaScriptCore.h>

@protocol JsBindingDemoProtocol <JSExport>
JSExportAs(nativeAdd, - (NSInteger)addX:(NSInteger)x andY:(NSInteger)y);
@end

@interface JsBindingDemo : NSObject <JsBindingDemoProtocol>

@end

binding類(lèi) .m 文件

#import "JsBindingDemo.h"
@implementation JsBindingDemo
- (NSInteger)addX:(NSInteger)x andY:(NSInteger)y {
    return x+y;
}
@end

我們要用export 的方式去調(diào)用,我們首先要綁定初始化binding類(lèi)衰伯,然后注入到j(luò)s 中铡羡,代碼如下:

- (void)initBinding {
    JsBindingDemo *binding = [[JsBindingDemo alloc]init];
    self.jsbinding_context[@"JsBindingDemo"] = binding;
}

2> native調(diào)用js 方法(也有兩種方法)

a>context 用上下文執(zhí)行
- (JSValue *)evaluateScript:(NSString *)script;
eg:執(zhí)行js中的 native_ execute() 方法
 [self.jsbinding_context evaluateScript:@"native_ execute()"];
b>用webview 執(zhí)行
- (JSValue *)evaluateScript:(NSString *)script withSourceURL:(NSURL *)sourceURL
eg: [self.webview evaluateScript@"native_ execute()" withSourceURL:@"index.js"];

- (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
eg:[self.webView stringByEvaluatingJavaScriptFromString:@"native_ execute()"];

備注:上面為調(diào)用方法代碼,導(dǎo)出意鲸、注入 屬性烦周,步驟與導(dǎo)出、注入方法代碼 相同不一一舉例說(shuō)明

五怎顾、參考資料:


一份走心的JS-Native交互電子書(shū)
鏈接: https://pan.baidu.com/s/1zhw9ITBT8E_XYgD7dO4DtA 提取碼: nabu


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末读慎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子槐雾,更是在濱河造成了極大的恐慌夭委,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚜退,死亡現(xiàn)場(chǎng)離奇詭異闰靴,居然都是意外死亡彪笼,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)蚂且,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)配猫,“玉大人,你說(shuō)我怎么就攤上這事杏死”靡蓿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵淑翼,是天一觀(guān)的道長(zhǎng)腐巢。 經(jīng)常有香客問(wèn)我,道長(zhǎng)玄括,這世上最難降的妖魔是什么冯丙? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮遭京,結(jié)果婚禮上胃惜,老公的妹妹穿的比我還像新娘。我一直安慰自己哪雕,他們只是感情好船殉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著斯嚎,像睡著了一般利虫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上堡僻,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天糠惫,我揣著相機(jī)與錄音,去河邊找鬼钉疫。 笑死寞钥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的陌选。 我是一名探鬼主播理郑,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼咨油!你這毒婦竟也來(lái)了您炉?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤役电,失蹤者是張志新(化名)和其女友劉穎赚爵,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冀膝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年唁奢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窝剖。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡麻掸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赐纱,到底是詐尸還是另有隱情脊奋,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布疙描,位于F島的核電站诚隙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏起胰。R本人自食惡果不足惜久又,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望效五。 院中可真熱鬧籽孙,春花似錦、人聲如沸火俄。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瓜客。三九已至,卻和暖如春竿开,著一層夾襖步出監(jiān)牢的瞬間谱仪,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工否彩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疯攒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓列荔,卻偏偏與公主長(zhǎng)得像敬尺,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贴浙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351