js與navive相互通信的機(jī)制

js –> native

目前,截止至iOS7崔步,iOS原生并沒有提供js直接調(diào)用native的方式稳吮,只能通過UIWebView相關(guān)的UIWebViewDelegate協(xié)議的

1

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

方法來做攔截,并在這個(gè)方法中井濒,根據(jù)url的協(xié)議或特征字符串來做調(diào)用方法或觸發(fā)事件等工作灶似,如

* 方法的返回值是BOOL值。

* 返回YES:表示讓瀏覽器執(zhí)行默認(rèn)操作瑞你,比如某個(gè)a鏈接跳轉(zhuǎn)

* 返回NO:表示不執(zhí)行瀏覽器的默認(rèn)操作酪惭,這里因?yàn)橥ㄟ^url協(xié)議來判斷js執(zhí)行native的操作,肯定不是瀏覽器默認(rèn)操作者甲,故返回NO

* /

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

NSURL *url = [request URL];

if ([[url scheme] isEqualToString:@"callFunction") {

//調(diào)用原生方法

return NO;

} else if (([[url scheme] isEqualToString:@"sendEvent") {

//觸發(fā)事件

return NO;

} else {

return YES;

}

}

雖然通過這個(gè)方式春感,js調(diào)用native是異步的,但是效率還是很高虏缸,我通過在js調(diào)用端鲫懒,把time傳入navive然后相減的方式計(jì)算纺铭,平均只有5ms的時(shí)間間隔。

如何觸發(fā)這個(gè)方法攔截

最最簡單且實(shí)用的方法莫過于用js創(chuàng)建一個(gè)隱藏的iframe設(shè)置src了刀疙,代碼:

1

2

3

4

5

6

7

8

function js2native(){

var iframe = document.createElement("iframe");

iframe.src="callFunction://";

iframe.style.display = 'none';

document.body.appendChild(iframe);

iframe.parentNode.removeChild(iFrame);

iframe = null;

}

通過查看phoneGap源碼的iOSExec方法舶赔,還有使用XMLHttpRequest或修改hash的方式來觸發(fā)方法攔截,但是因?yàn)橛衎ug或其他原因谦秧,不推薦竟纳。

native –> js

native調(diào)用js非常簡潔方便,只需要

1

[webView stringByEvaluatingJavaScriptFromString:@"alert('hello world!')"];

并且該方法是同步的疚鲤。

調(diào)試

雖然現(xiàn)在能直接用Safari的開發(fā)模式直接查看模擬器中的webView頁面锥累,但是經(jīng)過親自嘗試,最想要的也是最重要的js調(diào)試集歇,還是不支持桶略,不能進(jìn)行js斷點(diǎn)調(diào)試,還是要依賴console來弄……當(dāng)然css樣式調(diào)試支持的不錯(cuò)诲宇。

2014-04-09 update: 昨天發(fā)現(xiàn)Safari是可以對模擬器中的webView頁面進(jìn)行js斷點(diǎn)調(diào)試的际歼,之前是因?yàn)槲覜]有設(shè)置啟用所有斷點(diǎn)……

可以在模擬器進(jìn)入webView頁面后,打開Safari姑蓝,然后在 開發(fā)->iPhone simulator 菜單下進(jìn)行頁面選擇鹅心,進(jìn)入調(diào)試。

相關(guān)資料

唐巧-關(guān)于UIWebView和PhoneGap的總結(jié)

Github上的WebViewJavascriptBridge項(xiàng)目

大名鼎鼎的phonegap

轉(zhuǎn)載自:http://sjpsega.com/blog/2014/03/08/js-communicate-with-native-in-iOS/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纺荧,一起剝皮案震驚了整個(gè)濱河市旭愧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宙暇,老刑警劉巖输枯,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異占贫,居然都是意外死亡桃熄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門靶剑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜻拨,“玉大人池充,你說我怎么就攤上這事桩引。” “怎么了收夸?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵坑匠,是天一觀的道長。 經(jīng)常有香客問我卧惜,道長厘灼,這世上最難降的妖魔是什么夹纫? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮设凹,結(jié)果婚禮上舰讹,老公的妹妹穿的比我還像新娘。我一直安慰自己闪朱,他們只是感情好月匣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奋姿,像睡著了一般锄开。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上称诗,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天萍悴,我揣著相機(jī)與錄音,去河邊找鬼寓免。 笑死癣诱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的袜香。 我是一名探鬼主播狡刘,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼困鸥!你這毒婦竟也來了嗅蔬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤疾就,失蹤者是張志新(化名)和其女友劉穎澜术,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猬腰,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸟废,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姑荷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盒延。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鼠冕,靈堂內(nèi)的尸體忽然破棺而出添寺,到底是詐尸還是另有隱情,我是刑警寧澤懈费,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布计露,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏票罐。R本人自食惡果不足惜叉趣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望该押。 院中可真熱鬧疗杉,春花似錦、人聲如沸蚕礼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闻牡。三九已至净赴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間罩润,已是汗流浹背玖翅。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留割以,地道東北人金度。 一個(gè)月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像严沥,于是被迫代替她去往敵國和親猜极。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

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