代码之家  ›  专栏  ›  技术社区  ›  Naval Hasan

未在Xcode 9模拟器中加载特定URL的WebView

  •  1
  • Naval Hasan  · 技术社区  · 7 年前

    我正在尝试使用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()
        }
    
    }
    

    我认为我的代码没有错。但我想知道我是否能做些什么使它在模拟器上工作。

    谢谢

    1 回复  |  直到 6 年前
        1
  •  4
  •   Aaron Cyrman    7 年前

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

    我注意到您提到您正在使用Swift 4,我认为您应该考虑使用WebKit视图( WKWebView )自 UIWebView 已弃用。在里面 Apple's documentation 你可以看到如何实现它,这很简单。

    如果您的证书不受信任,则必须添加到信息中。普利斯特 App Transport Security Settings , Allow Arbitrary Loads 是的。(不建议这样做)。

    代码非常简单,请尝试一下:

    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))
            }
        }
    }