web-dev-qa-db-ja.com

WKWebViewがWebページをロードしない-Swift

このコードはAppleホームページをロードすることになっていますが、代わりに空白の画面を表示します。
これは、HTTP URLとHTTPS URLの両方で発生します。

コード:

import UIKit
import WebKit

class WebViewController: UIViewController, WKUIDelegate{

    var webView: WKWebView!

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

    }
    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .red

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

「App Transport Security Settings」を変更して、任意のロードを許可しようとしました。何も変更しませんでした。

スクリーンショット:

ビュー階層:

Captured view hierarchy Screenshot

シミュレーターのSafariデバッグコンソール:

Safari debug console Screenshot

enter image description here

8

私は解決策を見つけました。この問題の原因はAVG AntiVirusのwebshieldです。何らかの理由でAVG webshieldはシミュレータからのすべてのネットワーク通信を不正として扱います。 www.Apple.comは安全ではない、または他のWebサイトではないという。

Safari screenshot

次のスクリーンショットは、webkitのエラーを示すsystem.logからのものです。

System log

この問題を再現するには、AVGアンチウイルスをインストールし、Webシールドをオンにします。アプリのWKWebview(シミュレーター上)は何もロードしません。

実際のデバイスで動作しなかった理由がわかりません。デバイスの別の問題である可能性があります。派生データフォルダー、実際のアプリも削除し、デバイスを再起動しました。

みなさん、答えてくれてありがとう。

10

Mac用のアプリを構築していますか?

Mac用のアプリを構築している場合は、必ずApp Sandbox ON ターゲットでNetworks Outgoing Connectionsにチェックマークを付けます。

enter image description here


更新:長距離を希望する場合は、次を追加してください YourAppName.entitlements

<key>com.Apple.security.app-sandbox</key>
<true/>
<key>com.Apple.security.network.client</key>
<true/>
5
Mick

自動レイアウトとすべてのデバイスの定数10を使用した正しい方法:

import UIKit
import WebKit

class ViewController: UIViewController, WKUIDelegate {

let webView = WKWebView()

override func viewDidLoad() {
    super.viewDidLoad()
    setupWebView()
}

fileprivate func setupWebView() {
    webView.uiDelegate = self
    webView.translatesAutoresizingMaskIntoConstraints = false
    DispatchQueue.main.async {
        guard let url = URL(string: "http://www.Apple.com") else { return }
        self.webView.load(URLRequest(url: url))
    }
    view.addSubview(webView)
    webView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 10).isActive = true
    webView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 10).isActive = true
    webView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -10).isActive = true
    webView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: 10).isActive = true
}}

info.plist内:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
4
Fabio

次のコードは、Xcode 9.3でうまく機能します。

import UIKit
import WebKit

class ViewController: UIViewController {

    var webView: WKWebView!

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

    override func viewDidLoad() {
        super.viewDidLoad()

        webView.load(URLRequest(url: URL(string: "https://www.Apple.com")!))
    }

}

結果は次のとおりです。

WKWebView in iOS Simulator.

3
Sam Fischer

コードは正常に機能しています

//
//  ViewController.Swift
//  StackOverflow
//
//  Created by Vivek Kumar on 5/11/18.
//  Copyright © 2018 Vivek. All rights reserved.
//

import UIKit
import WebKit
class ViewController: UIViewController ,WKUIDelegate{

    var webView: WKWebView!

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

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

これを生成し、

Simulator screenshot by running your code

0
Vivek Kumar

以下のコードを試すことができます

import UIKit
import WebKit

class WebViewController: UIViewController {

var wkWebview: WKWebView!

 override func viewDidLoad() {

   super.viewDidLoad()

    var Ycord : CGFloat = 0.0 // for top space 
    if UIScreen.main.bounds.height == 812 { //Check for iPhone-x
        Ycord = 44.0
    }
    else {
        Ycord = 20.0
    }

    let frame = CGRect(x: 0.0, y: Ycord, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height-Ycord)

    self.wkWebview = WKWebView(frame: frame, configuration: WKWebViewConfiguration())
    self.wkWebview.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    self.wkWebview.uiDelegate = self
    self.view.addSubview(self.wkWebview)

    DispatchQueue.main.async {

        self.wkWebview.load(URLRequest(url:URL(string: "https://www.Apple.com")!))
    }        
 }
}

出力

enter image description here

0
Rohit Makwana