iOS監聽H5頁面goBack返回事件問題
阿新 • • 發佈:2019-01-04
本部落格遷移來自:http://www.jianshu.com/users/465865c268ed/latest_articles
從native直接push到一個webView頁面,隱藏navigationBar,使用H5的頭部為導航欄。此時會出現一個問題,就是push出的這個webview沒有了原生的navigationBar,那麼在點選H5頁面上的返回按鈕時怎麼pop到之前的頁面呢?
當然,我們可以使用上一遍部落格提到的利用webViewjavascriptBridge的第三方來解決,這就需要H5和nativ相配合,如果h5是另一個團隊做的,那麼解決這麼一個簡單的問題確實顯得有點小題大做。
所以可以使用一種更簡單的方法,利用webView 的delegate方法來控制pop到H5頁面還是Native頁面。
由於系統尚且要相容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.webView goBack]:[self.navigationController popViewControllerAnimated:YES ];
}
return YES;
}
這樣就可以區分返回native還是H5
補充:
以上適用整個頁面都是H5的頁面
如果只有navigationBar是原生的,此時應該重寫pop事件:如下
-(void)navigationBarItemBackImage{
UIImage *image=[UIImage imageNamed:@"navigationBack"];
if ([PSBTools systemVersion]>=7) {
image= [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}
self .navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc]initWithImage:image style:UIBarButtonItemStyleDone target:self action:@selector(goBackAction)];
}
-(void)goBackAction{
if (self.webView.canGoBack==YES) {
[self.webView goBack];
}else{
[self.navigationController popViewControllerAnimated:YES];
}
}