美文网首页selectoriOS开发-WebView
iOS监听H5页面goBack返回事件问题

iOS监听H5页面goBack返回事件问题

作者: voidxin | 来源:发表于2016-03-30 20:39 被阅读12311次

从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];
    }
}

相关文章

网友评论

  • 小桥流水青山碧海:-(void)goBackAction{
    if (self.webView.canGoBack==YES) {
    [self.webView goBack];
    }else{
    [self.navigationController popViewControllerAnimated:YES];
    }
    }
    [self.webView goBack]; 从二级H5返回到一级H5 卡住了
    一级可以返回到 原生的根控制器
  • 阿斯顿卡卡:点击返回按钮,点击一次不能返回上一页面的webView,点击两次才可以,大神这是怎么回事?
    常绿箩:请问这个问题您解决了
  • 幸福晓杰2016:UIWebViewNavigationTypeBackForward 并不会显示,尤其是点击h5界面上的返回按钮,返回到上一级h5界面时。
  • goodthing:为啥只能返回一次,不能多吃返回???
    voidxin:@爱编程也爱自己 可以多次返回
  • 瑞廷:解决了,我是监听所有返回的url ,如果有URL中有返回自段,就设置返回APP
    voidxin:@瑞廷 :+1:
  • 瑞廷:我使用的第一种,整个页面都是H5的页面,全部都是webView,系统的navgationBar隐藏了。
    下面这个方法没走
    if (navigationType==UIWebViewNavigationTypeBackForward) {
    self.webView.canGoBack?[self.webView goBack]:[self.navigationController popViewControllerAnimated:YES];
    }
    我打印了一下 navigationType是 UIWebViewNavigationTypeother,返回不能识别,是怎么回事?求助大神?
  • 来宝:大神,我点击webView中加载的H5页面的返回键没反应,使用电脑打开H5页面就可以正常返回,安卓的也可以正常返回,怎么回事?
    null_js:@来宝 H5那边应该怎么返回?
    来宝:@云树_fde2 是H5那边的问题,他们返回方式的问题
    dc765d25a0e6:我也遇到了同样的问题,你解决了么?

本文标题:iOS监听H5页面goBack返回事件问题

本文链接:https://www.haomeiwen.com/subject/dlkelttx.html