iOS webView與H5的交互(返回頁面的處理)

當(dāng)在一個頁面觸發(fā)一個事件跳轉(zhuǎn)到一個H5頁面時,H5頁面內(nèi)部也可以進行下一級的跳轉(zhuǎn),這個時候我們導(dǎo)航欄使用蘋果原生的返回按鈕就需要處理頁面中的返回效果街立。是返回到pushH5的上一級頁面還是返回H5內(nèi)部的上一級頁面?

- (void)viewDidLoad {? ? [superviewDidLoad];UIButton* backButton = [UIButtonbuttonWithType:UIButtonTypeSystem];? ? backButton.frame= CGRectMake(10,20,20,20);? ? [backButton setBackgroundImage:[UIImageimageNamed:@"goBackImage"] forState:UIControlStateNormal];? ? [backButton addTarget:selfaction:@selector(back:) forControlEvents:UIControlEventTouchUpInside];self.navigationItem.leftBarButtonItem= [[UIBarButtonItemalloc]initWithCustomView:backButton];self.webView=[[UIWebViewalloc]initWithFrame:CGRectMake(0,0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];? ? _webView.backgroundColor= [UIColorclearColor];for(UIView* views in [self.webViewsubviews]) {if([views isKindOfClass:[UIScrollViewclass]]) {//去掉水平方向的滑動條[(UIScrollView*)views setShowsHorizontalScrollIndicator:NO];//去掉垂直方向的滑動條[(UIScrollView*)views setShowsVerticalScrollIndicator:NO];for(UIView* inScrollView in views.subviews) {if([inScrollView isKindOfClass:[UIImageViewclass]]) {//隱藏上下滾動出邊界時的黑色的圖片inScrollView.hidden=YES;? ? ? ? ? ? ? ? }? ? ? ? ? ? }? ? ? ? }? ? }NSString* urlString = [NSStringstringWithFormat:@"%@xxxxxxxx",BASE_URL];NSURL* url = [NSURLURLWithString:urlString];NSURLRequest* request = [NSURLRequestrequestWithURL:url];? ? _webView.delegate=self;? ? [_webView loadRequest:request];? ? [self.viewaddSubview:self.webView];}//用蘋果自帶的返回鍵按鈕處理如下(自定義的返回按鈕)- (void)back:(UIBarButtonItem*)btn{if([self.webViewcanGoBack]) {? ? ? ? [self.webViewgoBack];? ? }else{? ? ? ? [self.viewresignFirstResponder];? ? ? ? [self.navigationControllerpopViewControllerAnimated:YES];? ? }}//如果是H5頁面里面自帶的返回按鈕處理如下:#pragma mark - webViewDelegate- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {NSString* requestString = [[request URL] absoluteString];? ? requestString = [requestString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];//獲取H5頁面里面按鈕的操作方法,根據(jù)這個進行判斷返回是內(nèi)部的還是push的上一級頁面if([requestString hasPrefix:@"goback:"]) {? ? ? ? [self.navigationControllerpopViewControllerAnimated:YES];? ? }else{? ? ? ? [self.webViewgoBack];? ? }returnYES;}//獲取當(dāng)前頁面的title和url- (void)webViewDidFinishLoad:(UIWebView*)webView{? ? [SVProgressHUD dismiss];NSString* title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];//獲取當(dāng)前頁面的titleself.title= title;//獲取當(dāng)前網(wǎng)頁的htmlself.currentURL= webView.request.URL.absoluteString;NSLog(@"title-%@--url-%@--",self.title,self.currentURL);NSString*lJs = @"document.documentElement.innerHTML";self.currentHTML= [webView stringByEvaluatingJavaScriptFromString:lJs];}


從native直接push到一個webView頁面垛孔,隱藏navigationBar逾苫,使用H5的頭部為導(dǎo)航欄趟咆。此時會出現(xiàn)一個問題呵扛,就是push出的這個webview沒有了原生的navigationBar电湘,那么在點擊H5頁面上的返回按鈕時怎么pop到之前的頁面呢隔节?

當(dāng)然万搔,我們可以使用上一遍博客提到的利用webViewjavascriptBridge的第三方來解決,這就需要H5和nativ相配合官帘,如果h5是另一個團隊做的瞬雹,那么解決這么一個簡單的問題確實顯得有點小題大做。

所以可以使用一種更簡單的方法刽虹,利用webView 的delegate方法來控制pop到H5頁面還是Native頁面酗捌。

由于系統(tǒng)尚且要兼容iOS7,加上還涉及到native向webView寫cookie的問題涌哲,而WKWebView貌似只支持在iOS8以上使用胖缤,在cookie處理和緩存處理方面會有比較大的坑,所以項目中依舊使用的是UIWebView阀圾。在webView的代理方法中添加如下代碼:

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType{if(navigationType==UIWebViewNavigationTypeBackForward) {self.webView.canGoBack?[self.webViewgoBack]:[self.navigationControllerpopViewControllerAnimated:YES];? ? }returnYES;}

這樣就可以區(qū)分返回native還是H5

補充:

以上適用整個頁面都是H5的頁面

如果只有navigationBar是原生的哪廓,此時應(yīng)該重寫pop事件:如下

-(void)navigationBarItemBackImage{UIImage*image=[UIImageimageNamed:@"navigationBack"];if([PSBTools systemVersion]>=7) {? ? ? ? image= [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];? ? }self.navigationItem.leftBarButtonItem=[[UIBarButtonItemalloc]initWithImage:image style:UIBarButtonItemStyleDonetarget:selfaction:@selector(goBackAction)];}-(void)goBackAction{if(self.webView.canGoBack==YES) {? ? ? ? [self.webViewgoBack];? ? }else{? ? ? ? [self.navigationControllerpopViewControllerAnimated:YES];? ? }}



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市初烘,隨后出現(xiàn)的幾起案子涡真,更是在濱河造成了極大的恐慌,老刑警劉巖肾筐,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哆料,死亡現(xiàn)場離奇詭異,居然都是意外死亡吗铐,警方通過查閱死者的電腦和手機东亦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唬渗,“玉大人典阵,你說我怎么就攤上這事∧魇牛” “怎么了壮啊?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蹋半。 經(jīng)常有香客問我他巨,道長,這世上最難降的妖魔是什么减江? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任染突,我火速辦了婚禮,結(jié)果婚禮上辈灼,老公的妹妹穿的比我還像新娘份企。我一直安慰自己,他們只是感情好巡莹,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布司志。 她就那樣靜靜地躺著甜紫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪骂远。 梳的紋絲不亂的頭發(fā)上囚霸,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機與錄音激才,去河邊找鬼拓型。 笑死,一個胖子當(dāng)著我的面吹牛瘸恼,可吹牛的內(nèi)容都是我干的劣挫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼东帅,長吁一口氣:“原來是場噩夢啊……” “哼压固!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起靠闭,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤帐我,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后阎毅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體焚刚,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年扇调,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抢肛。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡狼钮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捡絮,到底是詐尸還是另有隱情熬芜,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布福稳,位于F島的核電站涎拉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏的圆。R本人自食惡果不足惜鼓拧,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望越妈。 院中可真熱鬧季俩,春花似錦、人聲如沸梅掠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至酪我,卻和暖如春消痛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背都哭。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工秩伞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人质涛。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓稠歉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親汇陆。 傳聞我的和親對象是個殘疾皇子怒炸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

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

  • 當(dāng)在一個頁面觸發(fā)一個事件跳轉(zhuǎn)到一個H5頁面時,H5頁面內(nèi)部也可以進行下一級的跳轉(zhuǎn),這個時候我們導(dǎo)航欄使用蘋果原生的...
    以德扶人閱讀 8,608評論 0 51
  • webView加載H5界面中,H5中鏈接跳轉(zhuǎn)到H5網(wǎng)頁毡代,H5中無返回按鈕阅羹,點擊leftBarButton會直接跳出...
    SunnyFeng0501閱讀 734評論 0 1
  • 前提:在iOS控制器中加載UIWebView,設(shè)置代理教寂,遵守UIWebViewDelegate協(xié)議捏鱼。 一、iOS調(diào)...
    大沖哥閱讀 1,241評論 0 8
  • iOS開發(fā)系列--網(wǎng)絡(luò)開發(fā) 概覽 大部分應(yīng)用程序都或多或少會牽扯到網(wǎng)絡(luò)開發(fā)酪耕,例如說新浪微博导梆、微信等,這些應(yīng)用本身可...
    lichengjin閱讀 3,644評論 2 7
  • 前言 關(guān)于UIWebView的介紹迂烁,相信看過上文的小伙伴們看尼,已經(jīng)大概清楚了吧,如果有問題盟步,歡迎提問藏斩。 本文是本系列...
    CoderLF閱讀 8,949評論 2 12