IOS開發(fā)—JS調(diào)用OC(通過非URL的方式)

這兩天真是愁,早上6點起床從老家來公司欲诺,弄得一整天腦子都只有一個字圍繞著我——“困”抄谐。

本來就很匆忙的項目,雪上加霜換需求扰法,項目里面原來通過url與javastrip交互的全換了蛹含。項目的最低系統(tǒng)要求提升至7.0,“JavaScriptCore”這個framework終于可以用起來,雖然我也不知道它為何物塞颁,只是聽說它為JS與OC提供了很好的溝通橋梁浦箱,換句話,IOS終于可以像安卓那樣與JS愉快的溝通了祠锣,但也僅僅是像酷窥,折磨我的日子是今天。

為了完成這個需求伴网,首先我參考一些博客寫了一個demo用了本地的一個html做試驗蓬推,非常OK,點我看博客

當(dāng)項目經(jīng)理問我實現(xiàn)了交互沒有的時候澡腾,我真的很自信的回答沸伏,demo已經(jīng)寫好了,應(yīng)該沒問題动分,當(dāng)項目經(jīng)理把我們的需求告訴我的時候毅糟,我真想抽自己一巴掌啊。我們的需求是JS先調(diào)用OC方法,把自己的一些參數(shù)傳給OC澜公,OC里面請求完成后姆另,再把結(jié)果告訴JS。覺得很容易的大神請繞過玛瘸,接下來我要講為了這需求蜕青,我忙活了大半天,還是通過別人的代碼完成的糊渊。

我們要做的有如下幾件事情:

首先:通過webview加載一個本地html文件

NSString *htmlPath=[[NSBundle mainBundle] resourcePath];

htmlPath=[htmlPath stringByAppendingPathComponent:@"html/test.html"];

NSURL *localURL=[[NSURL alloc]initFileURLWithPath:htmlPath];

[self.mWebV loadRequest:[NSURLRequest requestWithURL:localURL]];

其次:我們要在我們的OC代碼里面注冊JS方法

- (void) h5CallApp: (NSString*) param And2: (NSString*) param2 And3: (NSString*) param3

{

NSLog(@"test with param: %@ and param2: %@ and param3: %@", param, param2,param3);

}

要保證本地的html里面有h5CallApp這個方法哦右核。

這就是剛剛上述博客里面提到的方法,是不是看上次很簡單的樣子渺绒。

But

我運用到我們項目里面的時候贺喝,死活不能調(diào)用該方法菱鸥,why?我厚著臉皮問了我們的帥哥安卓開發(fā)躏鱼,得知他們里面有這一樣一行代碼

webView.addJavascriptInterface(new JSInvoke(), "test");

看上去第一眼的感覺是不是累似注冊了一個東西氮采,可是我找了好多博客我沒有找到我們IOS類似的啊,著急啊著急染苛。

意外的意外鹊漠,偉大的github上面就是資源多,我在上面找到一個EasyJSWebViewSample這樣一個開源項目茶行,里面有一句

MyJSInterface* interface = [MyJSInterface new];

[self.myWebView addJavascriptInterfaces:interface WithName:@"MyJSTest"];

是不是感覺和安卓里面的那個注冊類似的躯概,沒錯,太開心了畔师。

最后的最后娶靡,你以為結(jié)束了,NO!

該Demo里面的html有空的小朋友可以看一下看锉。

由于項目需求我們是3個參數(shù)姿锭,在該demo里面執(zhí)行拿到第一個參數(shù),該demo就運行出錯伯铣,提示我們數(shù)組越界了呻此,在這里真的浪費了好多時間,后來發(fā)現(xiàn)他們的demo里面調(diào)用兩個參數(shù)的方法在JS里面聲明的方法與OC里面真正的實現(xiàn)方法有點差入懂傀,比如OC里面定義的方法

- (void) h5CallApp: (NSString*) param And2: (NSString*) param2 And3: (NSString*) param3

在html里面只能寫成

MyJSTest.h5CallAppAnd2And3("param1","param2","param3")趾诗。

是不是覺得不可思義,最后我整體看了一下代碼蹬蚁,里面好像有這一段在注入JS的時候有用到的

inject: function (obj, methods){

window[obj] = {};

var jsObj = window[obj];

for (var i = 0, l = methods.length; i < l; i++){\\

(function (){

var method = methods[i];

var jsMethod = method.replace(new RegExp(\\":\\", \\"g\\"), \\"\\");

jsObj[jsMethod] = function (){

return EasyJS.call(obj, method, Array.prototype.slice.call(arguments));

};

})();\\

}

}

這個好像是替換方法的,原諒我的無知啊郑兴,我也是沒看懂犀斋,僅僅是感覺與猜測,勿噴我情连,我真的怕被噴叽粹。

最后的最后,JS的那邊的開發(fā)肯定是不會為了將IOS與安卓開發(fā)做區(qū)分寫代碼的却舀,所以我只能在注入JS完成后加了這么一句

[webView stringByEvaluatingJavaScriptFromString:@"test.h5CallApp=test.h5CallAppAnd2And3;"]

這句話的作用是替換JS里面的方法的虫几。

唉,偽程序媛還是無法將一個東西描述得很清楚挽拔,不過如果你有更好的方法辆脸,請記得告訴我。還有1個多小時就到傳說的雙11螃诅,但是與我有什么關(guān)系呢啡氢,睡覺吧状囱,晚安,各位倘是。

最后的最后,你們要的Demo來了搀崭,希望滿意。點我看Demo啦瘤睹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市默蚌,隨后出現(xiàn)的幾起案子冻晤,更是在濱河造成了極大的恐慌,老刑警劉巖绸吸,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鼻弧,死亡現(xiàn)場離奇詭異,居然都是意外死亡锦茁,警方通過查閱死者的電腦和手機攘轩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來码俩,“玉大人度帮,你說我怎么就攤上這事「宕妫” “怎么了笨篷?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瓣履。 經(jīng)常有香客問我率翅,道長,這世上最難降的妖魔是什么袖迎? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任冕臭,我火速辦了婚禮,結(jié)果婚禮上燕锥,老公的妹妹穿的比我還像新娘辜贵。我一直安慰自己,他們只是感情好归形,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布托慨。 她就那樣靜靜地躺著,像睡著了一般连霉。 火紅的嫁衣襯著肌膚如雪榴芳。 梳的紋絲不亂的頭發(fā)上嗡靡,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音窟感,去河邊找鬼讨彼。 笑死,一個胖子當(dāng)著我的面吹牛柿祈,可吹牛的內(nèi)容都是我干的哈误。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼躏嚎,長吁一口氣:“原來是場噩夢啊……” “哼蜜自!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起重荠,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎虚茶,沒想到半個月后戈鲁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡嘹叫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年婆殿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罩扇。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡婆芦,死狀恐怖喂饥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情荆陆,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站棠枉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏泡挺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一贱除、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧月幌,春花似錦、人聲如沸扯躺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至澎埠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間氮趋,已是汗流浹背弟塞。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工决记, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人系宫。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像椒惨,于是被迫代替她去往敵國和親潮罪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

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