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

本文介绍如何在iOS中,当使用UIWebView加载H5页面时,监听并处理H5页面的返回事件。通过 webView 的 delegate 方法,实现点击H5返回按钮时,决定是pop回原生页面还是继续在H5中浏览。文中提供了适用于全H5页面的解决方案,并补充了当navigationBar为原生情况下的处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本博客迁移来自: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];
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值