WKWebViewでローカルのHTMLが読み込めない&Webページ読み込み状況を取得してみる

広告:超オススメUnity Asset
  広告:超オススメUnity Asset

UIWebViewに置き換わる次世代WebViewとなるのではないかと思われる「WKWebView」を試しました。

01

クラスメソッドさんも「[iOS 8] WebKit Frameworkってなに?」で

UIWebView に取って代わるもの

と書いてますので、今後は、UIWebViewを使わない方がいいんじゃないか、と思っちゃったりします。

が、どうもローカルのHTMLファイルを読み込めないようです。現時点では、読み込めます。後述↓を(ちょっとバグっぽいところもありますが)。 情報を求めて調べてみたところ、Sencha Ext JSやTouchでおなじみのゼノフィさんの記事

WKWebView ローカルファイルローディング バグ

このバグはセキュリティーに関する問題なのですが、”WKWebView” をローカルのファイルシステムからロードさせてくれません。つまりどういう事かと言うと、埋め込まれた index.html は、”WKWebView” にはアクセスできないということです。これは、オフラインやローカルファイルを使用する PhoneGap や Cordova アプリの機能を妨げるものとなっています。

とあります。この情報のとおり、問題が今でも続いているとしたら、ちょっとWKWebViewへの魅力が半減って感じですかね。

現時点では、ローカルにアクセスできるようになっています!

ざっくり見て行きましょう。ローカルファイルの読み込みがやっと可能にiOS 8ではwebViewへ表示できるコンテンツはネット上のもの、もしくはインラインのHTMLのみでした。iOS 9になりよ…

Xcodeのオブジェクトライブラリにもドラッグして配置できるようなユーザーインターフェイスがなく、WKWebViewのインスタンスは自分でコード上で生成する必要があり、これもちょっと面倒なので、しばらくは(僕は)UIWebViewを継続して使いそうな気がします。

その反面、ページの読み込み状況をプログレスバーで表示したりすることができそうです。

WKWebViewのテスト from mushikago on Vimeo.

こんな感じで読み込み状況の値を取得できるので、この値をプログレスバーに適用してあげれば使えそうです。「SwiftでWKWebViewとKey-Value Observingを使ってWebページの読込み状況を取得する」の手順の通りに組み立てて、adobe.comあたりのページを表示してローディング状況を出力してみました。ソースはこんな感じです。

ローカルの音声ファイルを自動的に鳴らしてみようとしていたテストプロジェクトだったので「AutoPlayInWKWebView」とかいうプロジェクト名になっていますが、そこに至る前にローカルファイルを表示できなかったというオチでした。プロジェクトファイルごとGitHubにアップしておきます。

estimatedProgress test. Contribute to mushikago/AutoPlayInWKWebView development by creating an account on GitHub.