iOS监听H5页面goBack返回事件 & 网页监听APP返回键 (NavigationBackItemInjection)

2021-07-05 20:42:29 浏览数 (1)

  • 1.1 UIWebView 监听H5页面goBack返回事件
  • 1.2 WKWebView监听H5页面goBack返回事件
  • 2.1 原理
  • 2.2 例子
  • 什么时候会触发这个返回事件?
  • 截取当前显示在屏幕中的WKWebView
  • UINavigationBarDelegate
  • NavigationType
  • Disable all the '_blank' target in page's target
  • 在WKWebView的WKNavigationDelegate代理方法中处理应用跳转
  • 简单的处理WKWebView加载新页面
  • WKWebView显示JS弹框
  • WKWebView调用js方法
  • 监听 estimatedProgress

引言

需求:原生app使用WebView 控制器加载H5页面进行信用卡申请

问题:用户点击残忍放弃之后,没有关闭当前控制器

重现场景:用户点击返回按钮,暂时提示框:真的不要?

解决方案:

1、iOS监听H5页面goBack返回事件 2、直接使用Safari打开URL

相关文章:

iOS 封装WebView 控制器https://kunnan.blog.csdn.net/article/details/114832679

I 、 iOS监听H5页面goBack返回事件

方式一:通过与JS的桥接,让h5主动通知你的

如果是采用通过与JS的桥接,让h5主动通知你的方案,请看这两篇文章 1、https://blog.csdn.net/z929118967/article/details/1081469552、https://kunnan.blog.csdn.net/article/details/114832679

方式二:注入和监听WebView相关的返回类型及方法

1、UIWebViewNavigationTypeBackForward 2、canGoBack:判断当前H5界面是否可以返回的方法 3、goBack: 返回上一个界面 4、goForward:可以向前导航到back-forward列表中的内容,相当于回到关闭的之前看过的详情界面。 5、 _webView.allowsBackForwardNavigationGestures = YES;允许左滑右滑,默认值为NO;设置为YES后,即可实现左右滑手势操作后退前进

6、WKWebView的backForwardList

代码语言:javascript复制
if (_webView.backForwardList.forwardList.count > 0) {
    NSLog(@"forwardItem");
    NSLog(@"title:%@", _webView.backForwardList.forwardItem.title);
    NSLog(@"URL:%@", _webView.backForwardList.forwardItem.URL);//列表中条目的标题及url
}


7、goToBackForwardListItem:返回某个历史页面

代码语言:javascript复制
/*! @abstract Navigates to an item from the back-forward list and sets it
 as the current item.
 @param item The item to which to navigate. Must be one of the items in the
 web view's back-forward list.
 @result A new navigation to the requested item, or nil if it is already
 the current item or is not part of the web view's back-forward list.
 @seealso backForwardList
 */
- (nullable WKNavigation *)goToBackForwardListItem:(WKBackForwardListItem *)item;

1.1 UIWebView 监听H5页面goBack返回事件

UIWebView,可通过UIWebViewNavigationTypeBackForward来监听返回事件

代码语言:javascript复制
- (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;
}

重写原生导航栏的pop事件处理

根据[self.webView canGoBack]来做处理

代码语言:javascript复制
-(void)navigationBarItemBackImage{
    UIImage *image=[UIImage imageNamed:@"navigationBack"];
    if ([Tools 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.2 WKWebView监听H5页面goBack返回事件

0 人点赞