iOS UIWebView中js交互(一)

? ? ? H5出來(lái)以后影響越來(lái)越牛逼短条,以前需要移動(dòng)端苦逼多天搞出來(lái)的不錯(cuò)的原生復(fù)雜頁(yè)面溺拱,現(xiàn)在在開(kāi)發(fā)中多了一種選擇讯嫂,那就是運(yùn)用H5. H5的運(yùn)用除了一些很簡(jiǎn)單的靜態(tài)頁(yè)面不需要移動(dòng)端多做處理外谬盐,更多的時(shí)候需要移動(dòng)端與H5頁(yè)面交互來(lái)處理一些點(diǎn)擊事件。

? ? ? 好了廢話不多說(shuō)渣锦,直接上代碼硝岗。先來(lái)說(shuō)一說(shuō)UIWebView,這是iOS加載網(wǎng)頁(yè)或者其他格式文件常用的控件袋毙。

? ? ? UIWebView加載的api有三種

- (void)loadRequest:(NSURLRequest *)request;

- (void)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL;

- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL;

其中第一個(gè)- (void)loadRequest:(NSURLRequest *)request; 我們運(yùn)用的時(shí)候最常見(jiàn)型檀。就是直接將url加載就可以了

NSString *path = @"";

NSURL *url = [[NSURL alloc] initWithString:path];

[self.webView loadRequest:[NSURLRequest requestWithURL:url]];

第二個(gè)是一種加載本地文件或者數(shù)據(jù)返回的html數(shù)據(jù)

加載本地html -->

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

NSString *filePath = [resourcePath stringByAppendingPathComponent:@"test.html"];

NSString *htmlstring =[[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];

[self.webView loadHTMLString:htmlstring baseURL:[NSURL fileURLWithPath: [[NSBundle mainBundle] bundlePath]]];

加載返回的數(shù)據(jù),只要把htmlstring對(duì)應(yīng)替換就ok了听盖。

至于第三種加載方式胀溺,跟第二種方式類(lèi)似,只是更具體把web content的編碼方式接口給出來(lái)媳溺。至于MIMEType我也來(lái)簡(jiǎn)單介紹下月幌,MIMEType指的是content媒體類(lèi)型,比如HTML悬蔽,XML,GIF,FLASH扯躺,瀏覽器就是根據(jù)這個(gè)類(lèi)型的不同會(huì)選擇用不同的形式來(lái)顯示。

常見(jiàn)的MIME類(lèi)型

超文本標(biāo)記語(yǔ)言文本 .html,.html text/html

普通文本 .txt text/plain

RTF文本 .rtf application/rtf

GIF圖形 .gif image/gif

JPEG圖形 .ipeg,.jpg image/jpeg

au聲音文件 .au audio/basic

MIDI音樂(lè)文件 mid,.midi audio/midi,audio/x-midi

RealAudio音樂(lè)文件 .ra, .ram audio/x-pn-realaudio

MPEG文件 .mpg,.mpeg video/mpeg

AVI文件 .avi video/x-msvideo

GZIP文件 .gz application/x-gzip

TAR文件 .tar application/x-tar


同時(shí)UIWebView 中公開(kāi)四個(gè)方法

- (void)reload;//重新加載該網(wǎng)頁(yè)

- (void)stopLoading;//停止加載

- (void)goBack;//后退

- (void)goForward;//前進(jìn)

UIWebView 一個(gè)常用的屬性scalesPageToFit 蝎困,該屬性可以自動(dòng)對(duì)頁(yè)面進(jìn)行縮放以適應(yīng)屏幕录语,但是有時(shí)候會(huì)造成要展示的圖片等資源過(guò)小,不方便展示禾乘。解決這類(lèi)問(wèn)題的方法澎埠,我總結(jié)出兩種,一種是最簡(jiǎn)單不需要我們移動(dòng)端更改什么始藕,只要H5代碼中在CSS樣式中對(duì)對(duì)應(yīng)的width就行auto設(shè)置蒲稳;一種就要用到UIWebView的協(xié)議UIWebViewDelegate

UIWebViewDelegate 常用的代理方法

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

{//(@"加載失敗");}

- (void)webViewDidFinishLoad:(UIWebView *)webView

{//這個(gè)方法中調(diào)用更改web view Frame的方法}

- (void)webViewDidStartLoad:(UIWebView *)webView

{//(@"加載中...");}

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

{

NSString *currentURL= webView.request.URL.absoluteString;

//這個(gè)方法是UIWebView 開(kāi)始加載網(wǎng)頁(yè) 或者是響應(yīng)網(wǎng)頁(yè)內(nèi)超鏈接和點(diǎn)擊事件的必走方法。上面的currentURL就是webview要加載或者響應(yīng)的URL伍派,利用這個(gè)我們也可以做一些事情江耀。比如在加載一個(gè)網(wǎng)頁(yè)后,其中一個(gè)點(diǎn)擊事件诉植,點(diǎn)擊后跳轉(zhuǎn)頁(yè)面祥国。如果這個(gè)要跳轉(zhuǎn)的下一頁(yè)我們移動(dòng)端要自定制一些控件也要展示到另一個(gè)viewcontroller中,那么webview自己點(diǎn)擊跳轉(zhuǎn)我們就不需要晾腔。我們移動(dòng)端可以讓H5只響應(yīng)事件的點(diǎn)擊但是不觸發(fā)舌稀,然后我們?cè)谶@個(gè)方法中截取響應(yīng)的URL自己跳轉(zhuǎn)頁(yè)面再用UIWebView加載URL就可以了

return YES;

}


好了,上面啰嗦那么多灼擂,終于要進(jìn)入這文章的主題壁查。

先寫(xiě)一種最簡(jiǎn)單的交互 事件 ,其中不會(huì)用第三方框架類(lèi)

首先既然是交互剔应,那就是webview與html雙方都要參與的睡腿。也就是移動(dòng)端和H5 要商量一個(gè)統(tǒng)一的方法康谆。

function huoQu(){

var jiedian = $(".cur").children().html();var newStr =jiedian.substring(0,jiedian.indexOf("天"));

alert(newStr);

return newStr;

}

其中上面這個(gè)方法就是Html在js文件公開(kāi)出來(lái)的一個(gè)方法,該js文件要確定加載到html標(biāo)簽中<script>中嫉到,不然無(wú)法調(diào)用。

NSString *RuesltStr = [self.myWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"huoQu();"]];

這個(gè)就是移動(dòng)端在相應(yīng)的地方月洛,調(diào)用就ok何恶。返回的字段是什么樣式,就看你們的需要了嚼黔。自己個(gè)人總結(jié)不喜勿噴细层,謝謝!唬涧!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末疫赎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子碎节,更是在濱河造成了極大的恐慌捧搞,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狮荔,死亡現(xiàn)場(chǎng)離奇詭異胎撇,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)殖氏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)晚树,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人雅采,你說(shuō)我怎么就攤上這事爵憎。” “怎么了婚瓜?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵宝鼓,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我闰渔,道長(zhǎng)席函,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任冈涧,我火速辦了婚禮茂附,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘督弓。我一直安慰自己营曼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布愚隧。 她就那樣靜靜地躺著蒂阱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上录煤,一...
    開(kāi)封第一講書(shū)人閱讀 52,785評(píng)論 1 314
  • 那天鳄厌,我揣著相機(jī)與錄音,去河邊找鬼妈踊。 笑死了嚎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的廊营。 我是一名探鬼主播歪泳,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼露筒!你這毒婦竟也來(lái)了呐伞?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤慎式,失蹤者是張志新(化名)和其女友劉穎伶氢,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體瞬捕,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鞍历,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肪虎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劣砍。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖扇救,靈堂內(nèi)的尸體忽然破棺而出刑枝,到底是詐尸還是另有隱情,我是刑警寧澤迅腔,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布装畅,位于F島的核電站,受9級(jí)特大地震影響沧烈,放射性物質(zhì)發(fā)生泄漏掠兄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一锌雀、第九天 我趴在偏房一處隱蔽的房頂上張望蚂夕。 院中可真熱鬧,春花似錦腋逆、人聲如沸婿牍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)等脂。三九已至俏蛮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間上遥,已是汗流浹背搏屑。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留粉楚,地道東北人睬棚。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像解幼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子包警,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

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

  • iOS開(kāi)發(fā)系列--網(wǎng)絡(luò)開(kāi)發(fā) 概覽 大部分應(yīng)用程序都或多或少會(huì)牽扯到網(wǎng)絡(luò)開(kāi)發(fā)撵摆,例如說(shuō)新浪微博、微信等害晦,這些應(yīng)用本身可...
    lichengjin閱讀 3,672評(píng)論 2 7
  • http://www.cnblogs.com/mddblog/p/5281748.html 一特铝、整體介紹 UIWe...
    F麥子閱讀 1,236評(píng)論 0 2
  • IOS之UIWebView的使用 剛接觸IOS開(kāi)發(fā)1年多,現(xiàn)在對(duì)于 混合式 移動(dòng)端開(kāi)發(fā)越來(lái)越流行壹瘟,因?yàn)殚_(kāi)發(fā)成本上鲫剿、...
    學(xué)無(wú)止境666閱讀 45,795評(píng)論 5 53
  • OS之UIWebView的使用 剛接觸IOS開(kāi)發(fā)1年多,現(xiàn)在對(duì)于 混合式 移動(dòng)端開(kāi)發(fā)越來(lái)越流行稻轨,因?yàn)殚_(kāi)發(fā)成本上灵莲、速...
    知之未道閱讀 1,660評(píng)論 0 4
  • UIWebView的三種加載方式和其代理API 提供了三種方法:1.- (void)loadRequest:(NS...
    JamesYi閱讀 696評(píng)論 0 0