JS與OC交互之直接返回值

前言

在常見的hybridApp框架開發(fā)過程中,一般oc調(diào)用js時都是使用執(zhí)行一段js調(diào)用到某個方法的方式裙士,如下兩種:

//UIWebView
- (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;

//WKWebView
- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^ _Nullable)(_Nullable id, NSError * _Nullable error))completionHandler;

通過這兩種方式我們可以執(zhí)行一段js,在交互過程中可以理解為調(diào)用一段預(yù)先定義好的callback函數(shù)去實(shí)現(xiàn)到j(luò)s的回調(diào)。

同步返回值

開門見山話不多說,這里教大家如何簡單實(shí)現(xiàn)同步返回拓售,demo我甚至都不想給大家寫了,因為實(shí)在是太簡單了洼裤,并且不限于UIWebView或WKWebView邻辉,基本沒有什么遷移的羈絆溪王。
在UIWebView和WKWebView中有如下兩個代理

//UIWebView 雖說是私有的腮鞍,但是從來沒有因此被拒過
- (NSString *)webView:(UIWebView *)sender runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText;
//WKUIDelegate
- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullable NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * _Nullable result))completionHandler;

下面看一下簡單的調(diào)用過程

  • 先來看WKWebview的情況
//js
var result = prompt("123");//直接返回
alert('return'+result);//'return123'
//oc
- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullable NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * _Nullable result))completionHandler{
    //通過completionHandler將返回值傳回js,在js層面實(shí)現(xiàn)直接返回的效果
    completionHandler(prompt);
}
  • 再來看UIWebview的情況
//js
var result = prompt("123");//直接返回
alert('return'+result);
//oc
//在UIWebview中得先子類化UIWebview并重寫實(shí)現(xiàn)prompt的方法莹菱,之后便可直接使用
- (NSString *)webView:(UIWebView *)sender runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)text initiatedByFrame:(CGRect)frame{
    //直接ruturn移国,在js層面實(shí)現(xiàn)直接返回的效果
    return prompt;
}

可以看到,跨兩種webvie的實(shí)現(xiàn)都可以使用同樣的js代碼(當(dāng)然道伟,即使用window.webkit.messageHandlers.currentCookies.postMessage也可以在js層面進(jìn)行封裝從來實(shí)現(xiàn)js api的一致性)去與oc交互迹缀,并能直接用變量接受到返回值,大大提高了代碼可讀性蜜徽,讓你不再陷與callback地獄之中祝懂!
最后還是附上demo吧:https://github.com/ycace/iOS-WebView-Sync-Return

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拘鞋,隨后出現(xiàn)的幾起案子砚蓬,更是在濱河造成了極大的恐慌,老刑警劉巖盆色,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灰蛙,死亡現(xiàn)場離奇詭異,居然都是意外死亡隔躲,警方通過查閱死者的電腦和手機(jī)摩梧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宣旱,“玉大人仅父,你說我怎么就攤上這事。” “怎么了驾霜?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵案训,是天一觀的道長。 經(jīng)常有香客問我粪糙,道長强霎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任蓉冈,我火速辦了婚禮城舞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寞酿。我一直安慰自己家夺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布伐弹。 她就那樣靜靜地躺著拉馋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惨好。 梳的紋絲不亂的頭發(fā)上煌茴,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音日川,去河邊找鬼蔓腐。 笑死,一個胖子當(dāng)著我的面吹牛龄句,可吹牛的內(nèi)容都是我干的回论。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼分歇,長吁一口氣:“原來是場噩夢啊……” “哼傀蓉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起职抡,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤葬燎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后繁调,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萨蚕,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年蹄胰,在試婚紗的時候發(fā)現(xiàn)自己被綠了岳遥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡裕寨,死狀恐怖浩蓉,靈堂內(nèi)的尸體忽然破棺而出派继,到底是詐尸還是另有隱情,我是刑警寧澤捻艳,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布驾窟,位于F島的核電站,受9級特大地震影響认轨,放射性物質(zhì)發(fā)生泄漏绅络。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一嘁字、第九天 我趴在偏房一處隱蔽的房頂上張望恩急。 院中可真熱鬧,春花似錦纪蜒、人聲如沸衷恭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽随珠。三九已至,卻和暖如春猬错,著一層夾襖步出監(jiān)牢的瞬間窗看,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工兔魂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留烤芦,地道東北人举娩。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓析校,卻偏偏與公主長得像,于是被迫代替她去往敵國和親铜涉。 傳聞我的和親對象是個殘疾皇子智玻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 29,321評論 8 265
  • 隨著H5技術(shù)的興起,在iOS開發(fā)過程中芙代,難免會遇到原生應(yīng)用需要和H5頁面交互的問題吊奢。其中會涉及方法調(diào)用及參數(shù)傳值等...
    Chris_js閱讀 3,060評論 1 8
  • 前言 關(guān)于UIWebView的介紹,相信看過上文的小伙伴們纹烹,已經(jīng)大概清楚了吧页滚,如果有問題,歡迎提問铺呵。 本文是本系列...
    CoderLF閱讀 8,945評論 2 12
  • 裱紙機(jī)膠粉@感情猶如白開水你是否也是這樣的人裹驰?那些倔強(qiáng)又違心的話,總是可以輕易地說出口片挂,而那些甜言卻總是找不到適宜...
    趙盛雷閱讀 239評論 0 1
  • 沒有一張紙能永遠(yuǎn)潔白無瑕 正如沒有一個人能永遠(yuǎn)天真無邪 終有一天 我們會在一個重大打擊中成長 而現(xiàn)在的我們 只有不...
    顧汐若_思卿閱讀 238評論 0 2