最近Androidアプリを開発している時に発生したのですが、webviewを表示する画面で一部画像が正しく表示されない問題が発生しました。
何でだろうとエラーログを確認した所、下記の様なエラーが…。
[INFO:CONSOLE(0)] "Mixed Content: The page at 'https://***.com' was loaded over HTTPS, but requested an insecure image 'http://***.com/img/hoge.png'. This request has been blocked; the content must be served over HTTPS.", source: https://***.com (0)
どうもhttpsのページ内でURLがhttpの画像を表示しようとした所、httpへのリクエストが安全ではないとの理由ブロックされていた様でした。
今までこんな事はなかったのに…。
色々と原因を調べた所、Android L(API Level21)から一部仕様の変更があった様でした。
Android Lから、httpとhttpsの混在しているページをwebviewで表示しようとするとブロックする様にデフォルトの設定が反対になったようでして…。
WebSettings | Android Developers #setMixedContentMode
この設定が変わっていたため画像も表示されませんでした。
確かにセキュリティの観点から見ると対応として正しいと思うのですが、こんな罠が…。
対応方法
対応方法としては、セキュリティの理由から変更されているので、可能ならwebページ側のコンテンツを直すのが一番良さそうですね。
※ただ自分で管理しているページなら対応出来るかもしれないけど、すぐ出来ない場合もありますよね…。
アプリ側で対応を行う場合は、下記の様にwebviewの設定を変更する事で混在コンテンツのページも正常に表示される様になりました。
とりあえず仕事でもアプリ開発しているのだし、もう少し公式ブログやドキュメントとか追ってないとなーと反省しました..(^_^;)