やはり、iOS 9ではUIWebViewを使うのは現実的ではないらしく、一応Angular.jsの世界ではモンキーパッチが提供されているようですが、当方Angular.jsがブームになる前からのアプリを保守しているため使うことができず。。。
WKWebViewに移行するしかなさそうなのですが、鉄板ルートのCordova iOS 4.0の提供はまだもう数日?はかかりそう。
まだBeta版にも至っていない状況ですが、開発中のコードをGitHubから持ってきて試してみても、いまいちちゃんと動かない感じ。
Cordova WKWebView Polyfill Pluginを試してみる
そんな中で見つけたのが、Cordova WKWebView Polyfill Plugin。
Polyfillとは、CSSの世界なんかでよく聞きますが、こういう意味。
古いブラウザーに欠けている部分、新しいブラウザーでも足りない機能の穴を埋めることを、ポリフィル (polyfill) という風に呼ばれています。
もともと、壁の穴を埋めるための有名な商品で Polyfilla (ポリフィラ) というのがあり、ブラウザの穴を埋めるという行為も名前からポリフィルという言葉を動詞として使ったということです。
そんな語源があったのですね。
インストール
cordova plugin add @telerik/cordova-plugin-wkwebview
cordova prepare
インストールは簡単で、Cordovaの通常の形式でインストールできます。
プラグインをインストールするだけで、それ以外の作業は特に必要なく、iOS8以上ならWKWebView、それ未満ならUIWebViewが使用されるようになります。
インストールの際に、合わせてcordova-plugin-webserverが導入されます。
このwebserverプラグインがポイントで、例えばCordovaアプリのViewに相当するindex.htmlは、file://~ではなくて、http://localhost~でアクセスされます。そのため、CORS問題が回避できるのです。
WKWebViewを使ったからといって全て解決ではない
残念なことですが、WKWebViewを使ったからといって、iOS 8までで動作していたCordovaアプリが完全に動くようになるわけではありません。
UIWebViewとWKWebViewは完全に上位互換というわけではなく、仕様上の違いがありますし、現状ではそれ以外の問題が発生することもあります。
そういう意味では、Cordova WKWebView Polyfill PluginでWKWebViewでの一応の動作は確認できるけれども、Codova iOS 4.0の正式リリースも待つ必要があるのではないかと思います。