アプリ内でWebページを開く、WebView(WKWebView)の使い方

前置き

元々はUIKitで提供されていたWebViewですが、数年程前からdeprecated(非推奨)になっています。ですのでこちらは使用せず、代わりにWebKitで提供されているWKWebViewを使いましょう

手順

早速使い方の手順を説明していきます。流れとしてはこうです。

  1. WebKitをインポートする
  2. WKWebViewをoutlet接続する
  3. WKWebViewでurlを開く

1. WebKitをインポートする

「TARGETS」→「General」→「Frameworks, Libraries, and Embedded Content」から+を押してWebKitを追加します。

状態はDo not Embedのままでおkです。WebViewを使う時はこのようにインポートして使います。

import WebKit  

WebKitViewを扱いたいViewControllerのファイルに追記しておきましょう。

2. WKWebViewをoutlet接続する

選ぶのは下です!!deprecatedの方を選ばないように!!

最終的にこんな感じになるでしょう。

import UIKit  
import WebKit  

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

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

3. WKWebViewでURLを開く

load()というメソッドでURLを読み込むことができます。コードを見るとこう。

//apple公式ドキュメントより抜粋  
func load(_ request: URLRequest) -> WKNavigation?  

urlを引数として渡す際にはString型をURLRequest型に変換する必要があるようです。実際のコードはこうなります。

override func viewDidLoad() {  
    let url = URL(string: "https://google.com")!  
    let urlRequest = URLRequest(url: url)  
    webView.load(urlRequest)  
}  

viewDidLoad()で読み込んでいます。String型から直接URLRequest型に変換することはできないので「String」→「URL」→「URLRequest」と変換しています。少し冗長な感じが否めませんが、かといって無理やり一行に収めるのも可読性の観点からお勧めできません。 このようにメソッドに切り分けておくと少しはましでしょうか

override func viewDidLoad() {  
    super.viewDidLoad()  

    // Do any additional setup after loading the view.  
    openURL("https://google.com")  
}  

private func openURL(_ string: String?) {  
    guard let string = string else { return }  
    let url = URL(string: urlStr)!  
    let request = URLRequest(url: url)  
    webView.load(request)  
}  

注: 読み込むURLが「http://~」の場合に必要な設定手順

http://~から始まるURLを開く場合、下画像のように設定が必要です!!気を付けましょう

簡単な手順としてはまずInfo.plistを開きまして、「App Transport Security Settings」→「Allow Arbitrary Loads」の値をYESとします。項目は+ボタンで追加可能です。わからなければ下の記事を見るのがわかりやすいです。

まとめ

  • WebViewは非推奨!!WKWebViewを使おう
  • WKWebViewはWebKitというライブラリをインポートしないと使えない
  • WebViewのメソッド、load()の引数はURLRequest型。String型から変換して渡そう

ありがとうございました

参考

最後までご覧いただきありがとうございました

こっちは真面目に作ってます。笑

サクっとプログラミング

iOSアプリ開発のあれこれがまとまるwebサイト