【BUG笔记】WebView返回时重复加载问题(CanGoBack返回true)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【BUG笔记】WebView返回时重复加载问题(CanGoBack返回true)相关的知识,希望对你有一定的参考价值。

参考技术A 同一webview页面,加载完成后在小米手机上可正常返回,即canGoBack为false,直接调用super.onBackPress方法退出activity;而华为、oppo(目前已知)机型上,会出现canGoBack为true的情况,此时按下返回键会重新加载页面,用户体验很差。

1、经过debug检查,异常机型上页面加载会回调到shouldOverrideUrlLoading方法,由此判断可能是由于页面初始化发生了重定向导致的问题;

2、经过分析H5页面,发现页面加载时使用了window.location.replace方法,测试后发现在华为OV流手机上会被识别为跳转了新页面,即canGoback会返回true,造成返回时重复加载页面的问题。

1、让H5大佬修改下实现,避免使用replace(废话)

2、在onBackPress中判断当前加载的url和webview初始化时的url是否一致,如一致即代表目前实际处在顶层页面,不调用goback方法即可。

从 webView goBack 后 PDF 不加载

【中文标题】从 webView goBack 后 PDF 不加载【英文标题】:PDF does not load after goBack from webView 【发布时间】:2017-09-15 08:08:53 【问题描述】:

我目前正在使用 webView 显示 pdf。在这个 pdf 中,我有到其他网站的超链接。

问题是,当我转到其中一个网站并在那里滚动一点时,当我单击后退按钮(调用 webView.goBack())时,它会返回 pdf,跳到顶部并且可以不再滚动它,除了第一页之外什么都看不到,所以它也可能无法正确加载。

另外,如果我也这样做,请访问该网站,但根本不要在那里滚动,或者根本不做任何事情。如果我点击后退按钮,它会带我回到 pdf 并且工作得很好。

那么对于这里可能出现的问题以及如何解决它有什么建议吗?

编辑:我还添加了一张图片来展示它的外观

【问题讨论】:

您的 webView 是否启用了 userInteraction 和滚动功能? 是的,我确实启用了它。在点击超链接之前它确实可以正常工作 【参考方案1】:

我为此找到的解决方案是在委托方法中再次显示pdf时重新加载webView

点击导航栏后退按钮时:

fileprivate var shouldReloadWebView: Bool = false

@objc private func tappedBackButton(_ button: UIButton) 
  if webView.canGoBack 
    shouldReloadWebView = true
    webView.goBack()
   else 
    self.navigationController!.popViewController(animated: true)
  

在委托方法中:

func webViewDidFinishLoad(_ webView: UIWebView) 
  if shouldReloadWebView 
    shouldReloadWebView = false
    webView.reload()
  

【讨论】:

以上是关于【BUG笔记】WebView返回时重复加载问题(CanGoBack返回true)的主要内容,如果未能解决你的问题,请参考以下文章

Objective C - WebView无法从顶部重新加载

WebView返回时停留在第一层界面,重复刷新此界面

从加载的 WebView 中获取 HTML 代码 [重复]

重新加载 webview 时 EasyJSWebView 中断

目标C - 再次点击标签栏项目时,如何再次重新加载网页视图?

UIWebView 在 webview 完成加载时高度不正确