Posted at

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


オフライン状態を取得

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でインターネット接続エラーを取得する/

上記の記事を参考にさせていただきました。

ありがとうございます!