WKWebView 在 iOS 13 上无法加载网页

5

我正在尝试使用Swift在iOS 13上加载一个带有WKWebView的网页。在iOS 12中,它工作正常。问题是,在iOS 13上,WKWebView显示为白屏。使用相同的URL(iOS 12 / iOS 13),因此我可以100%确定URL没有问题。这是我加载网页的UIViewController:

import UIKit
import WebKit

class WebViewController: UIViewController , WKNavigationDelegate{

  var param : String!
  var webView: WKWebView!

  override func viewDidLoad() {
      super.viewDidLoad()

      let url = URL(string: "https://google.com")!
      webView.load(URLRequest(url: url))
  }

  override func loadView() {
      webView = WKWebView()
      webView.navigationDelegate = self
      view = webView
  }
}

Safari检查器结果:

  • iOS 13模拟器为about:blank
  • iOS 12.4真实设备为www.google.com

1
以下是您可以尝试以隔离问题的方式进行的几件事情:
  1. 使用视图检查器验证WKWebView是否实际上在视图层次结构中。
  2. 使用Safari检查Web视图。您需要Safari技术预览版,但它将连接到模拟器的Web视图,并允许您检查Web视图的内容。
- Rudedog
@Rudedog 我尝试使用谷歌主页的URL(“https://google.com”),在模拟器iOS13中结果为空白,并且在Safari检查器中,它会在真实设备iOS 12.4上给出正确的响应。 - elhoucine ayoub
有点不确定,但是 https://www.google.com 可以吗?也许它在解析URL时遇到了困难,尽管我不知道为什么会这样。 - Ferdz
请返回已翻译的文本。 - Tomer Even
2个回答

1

确保在发出请求之前始终拥有有效的URL的一种方法是使用“if”而不是强制解包。

override func viewDidLoad() {
      super.viewDidLoad()

      if let url = URL(string: MyData.url){
         webView.load(URLRequest(url: url))
      }
}

你也可以添加一个 else 语句或使用早期返回来打印一些东西,如果你不进去的话。
除了检查url是否有效之外,您还可以调试并检查webview是否为nil。如果是这种情况,那么您的解决方案是将代码添加到viewWillAppear而不是viewDidLoad中。

1
该URL是有效的,就像我说的,在iOS 12上它运行良好,但在iOS 13上却不行。 - elhoucine ayoub
调试您的代码并检查webview是否为“nil”。我有一种感觉,您正在尝试在“viewDidLoad”中过早地进行请求,并且必须将其移动到其他地方,就像我的答案建议的那样。 - S.Mitchell
是的,我已经按照你建议的做了所有操作,如果有关于 nil 值的问题,那么在 iOS12 上也会是 nil。 - elhoucine ayoub
1
在这种情况下,您可以使用override func webView(WKWebView, didFailProvisionalNavigation: WKNavigation!, withError: Error),当网页视图加载内容时发生错误时调用该函数。打印出withError,这应该会为您提供更多信息以便解决问题。 - S.Mitchell

0

我也在 iOS 12.2 版本的模拟器上尝试了一下,但出现了相同的问题。所以我认为模拟器不支持 WKWebView,在真实设备上它可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接