【问题标题】:WebView is not loading for specific URL in Xcode 9 simulatorWebView 未在 Xcode 9 模拟器中加载特定 URL
【发布时间】:2017-12-10 04:30:28
【问题描述】:

我正在尝试在 swift 4 中使用 webView 加载 URL。我尝试了 https://www.google.co.in,它工作正常。并且特定 URL 的移动站点在 android 上运行良好。 但是当我在模拟器中尝试这个时,它会永远加载。

我的代码如下:

import UIKit

class WebViewController: UIViewController, UIWebViewDelegate {

    @IBOutlet weak var webView: UIWebView!

    let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge)

  override func viewDidLoad() {
        super.viewDidLoad()

        webView.delegate = self
        if let url = URL(string: "https://www.myurl.com") {
            let request = URLRequest(url: url)
            webView.loadRequest(request)
        }


    }


   public func webViewDidStartLoad(_ webView: UIWebView)
    {
        activityIndicator.center =  CGPoint(x: self.view.bounds.size.width/2, y: self.view.bounds.size.height/2)
        self.view.addSubview(activityIndicator)
        activityIndicator.color = UIColor.red
        self.activityIndicator.startAnimating()
    }
    public func webViewDidFinishLoad(_ webView: UIWebView)
    {
        self.activityIndicator.stopAnimating()
    }

}

我认为我的代码没有错。但我想知道我是否可以做任何事情让它在模拟器上运行。

谢谢

【问题讨论】:

  • 您的问题不清楚。您发布的代码实际上发生了什么?
  • 当我在模拟器中运行应用程序时,会调用 webViewDidStartLoad。它正在显示活动指示器。但网页没有加载。我等了 30 多分钟,我在模拟器中看到的只是一个带有活动指示器的空白页面。
  • 如果您在模拟器中将完全相同的 URL 输入到 Safari 中会发生什么?
  • 在模拟器的 Safari 中运行良好

标签: ios swift webview ios-simulator


【解决方案1】:

我刚刚用你的代码做了一个小项目,在模拟器中没有问题,https://www.google.co.in 加载就好了。

我注意到你提到你正在使用 Swift 4,我认为你应该考虑使用 WebKit View (WKWebView),因为 UIWebView 已被弃用。在Apple's documentation 你可以看到如何实现它,它非常简单。

如果您的证书不受信任,您必须在 Info.plist 中添加 App Transport Security Settings、Allow Arbitrary Loads 为 YES。 (不建议这样做)。

代码很简单,试试看:

import UIKit
import WebKit

class WebViewController: UIViewController, WKUIDelegate, WKNavigationDelegate {
    @IBOutlet weak var webView: WKWebView!

    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        webView.navigationDelegate = self
        view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        let myURL = URL(string: "https://www.myurl.com")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    }


    func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
        if let serverTrust = challenge.protectionSpace.serverTrust {
            completionHandler(.useCredential, URLCredential(trust: serverTrust))
        }
    }
}

【讨论】:

  • 我尝试了 WebKit View 并且发生了同样的事情。谷歌 ULR 正在工作。但我的不是。但是我没有使用 WebKit 视图的原因是因为我的部署目标是 9.0。谢谢你:)
  • 在https://www.myurl.com证书不受信任,你必须在Info.plist中添加App Transport Security Settings,Allow Arbitrary Loads。然后你必须实现这个:func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) 。我刚刚编辑了代码以反映这一点。我认为 WKWebView 自 iOS 8 以来也存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 2018-05-04
  • 1970-01-01
  • 1970-01-01
  • 2020-07-14
  • 1970-01-01
相关资源
最近更新 更多