1. 程式人生 > >iOS監聽H5頁面goBack返回事件問題

iOS監聽H5頁面goBack返回事件問題

本部落格遷移來自: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]; } }