Bloggerでhttpsリダイレクトが強制されてからiframeで埋め込んだGoogle Mapsが表示されない問題への対処

  0 件のコメント

問題

今さら気づいたのですが、ブログ(ブロガーです)の記事に埋め込んだGoogle Mapsが表示されなくなっていました。考えられるのは最近httpsリダイレクトが強制されるようになったこと。実際デバッグコンソールを見ると、以下のようなエラーが出ています。以前のGoogle Maps埋め込みはhttpだったからのようですね。

Mixed Content: The page at 'https://pota-run.blogspot.jp/2009/07/blog-post_05.html' was loaded over HTTPS, but requested an insecure resource 'http://maps.google.co.jp/maps/ms?ie=UTF8&hl=ja&msa=0&msid=10643009029909326…a88cb28548&ll=35.641394,139.220467&spn=0.083703,0.145912&z=12&output=embed'. This request has been blocked; the content must be served over HTTPS.

解決方法 - NG!

シンプルな解決方法は、記事のソースを修正すること。HTML編集画面で記事を開いて保存しようとすると、httpをhttpsに修正するかどうか聞いてきます。そこで「修正」を選ぶだけなので簡単です。

唯一最大の問題は、記事一つ一つを修正する必要があること。とてもやる気になりません。やるならアクセス数の多い記事から気長にやるくらいでしょうか。

別の方法として、一発で全記事の文字列を置換するサイトもあるようですが、セキュリティ的に恐ろしくてとてもじゃないができません。

解決方法 - OK!

それら以外に一発で解決する妙手はないものか...? しばし考えて、テンプレートにJavascriptを記述し、表示する記事のHTMLソースをダイナミックに変換するようにしたら、うまくいったようです。(全ページ見たわけではないのでたぶんですが。)

具体的には、以下のソースをテンプレートの</body>直前に記述することで、iframe中のhttp://をhttps://に強制変換します。全http://をhttps://に変換してもいいのですが、影響が不明なので、まずはこじんまりとiframeだけにしています。(※テンプレートへの記述時には、"&quot; にしてください。)

<script type="text/javascript">
  var targets = document.getElementsByTagName("iframe");
  for (i=0;i<targets.length;i++){
    targets[i].src=targets[i].src.replace("http://","https://")
  }
</script>

本スクリプトの適用前はこんな画面でしたが、


適用後はご覧の通り元通り。


Javaコンソールに相変わらずエラーは出ていますが、埋め込まれたGoogle Mapsは表示されるので、おそらく検出タイミングの問題かな?と思っています。完全な対策かどうかは分かりませんが、少なくとも表示はされるようなので、困っている方は試してみてはいかがでしょうか? ただしGoogleの検索順位に影響するかどうかは不明。そこまで考えるならやっぱり記事のソースを修正するしかないでしょうね。

以上、くれぐれも自己責任でお願いします。テンプレートのバックアップさえ取っておけば、失敗しても戻せるので、テンプレートのバックアップだけはしておきましょう。


0 件のコメント :

コメントを投稿

Related Posts Plugin for WordPress, Blogger...