LoginSignup
3
5

More than 3 years have passed since last update.

WKWebView オフライン状態を取得する

Posted at

オフライン状態を取得

WKWebViewでインターネット接続に失敗した(オフライン状態)時に自作のエラー画面を出したかったので調べました。
備忘録として書いておきます。

ViewController.swift
import UIKit
import WebKit

    func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
        let error = error as NSError

        if error.code == -1009 {
            print("offline")
          //オフライン時の処理
        }
    }

codeの値が1009だった場合インターネット接続がないようです。

実際に行った実装

ViewController.swift
import UIKit
import WebKit

class DetailOfArticleController: UIViewController {

    let detailOfArticleView = DetailOfArticleView.instance()
    let errorPageView = ErrorPageView.instance()
    var getUrl = ""
    var activityIndicatorView = UIActivityIndicatorView()
    override func viewDidLoad() {
        super.viewDidLoad()
        detailOfArticleView.frame = self.view.frame
        self.view.addSubview(detailOfArticleView)
        openUrl(urlsting: getUrl)

        detailOfArticleView.wkWebView.navigationDelegate = self
        activityIndicatorView.center = view.center
        activityIndicatorView.style = .whiteLarge
        activityIndicatorView.color = UIColor(hex: "660066")
        view.addSubview(activityIndicatorView)
    }

    func openUrl(urlsting: String) {
        let url = URL(string: urlsting)
        let urlRequest = URLRequest(url: url!)
        detailOfArticleView.wkWebView.load(urlRequest)
    }

}
extension DetailOfArticleController: WKNavigationDelegate {
    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
        activityIndicatorView.alpha = 1
        activityIndicatorView.startAnimating()
    }
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        activityIndicatorView.alpha = 0
        activityIndicatorView.stopAnimating()
    }
    func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
        let error = error as NSError

        if error.code == -1009 {
            print("offline")

//オフライン時の処理
            activityIndicatorView.alpha = 0
            activityIndicatorView.stopAnimating()
            errorPageView.frame = self.view.frame
            self.view.addSubview(errorPageView)
        }
    }

}

こちらはニュースアプリのように一覧ページから詳細ページ(WKWebViewを用いてwebページを表示)へ遷移させています。
getUrlは一覧ページからタップした際に取得しています。

参考

http://harumi.sakura.ne.jp/wordpress/2019/03/04/wkwebviewでインターネット接続エラーを取得する/
上記の記事を参考にさせていただきました。
ありがとうございます!

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5