iframeにHTMLを読み込むのですが、参照されるファイルがhttpsではなくhttpの場合、以下のようなエラーが発生します。
[blocked] {current_pagename}のページは{referenced_filename}から安全でないコンテンツを実行しました。
これをオフにする方法や、回避する方法はありますか?
iframeにはsrc
属性がなく、コンテンツは以下の方法で設定されています。
frame.open();
frame.write(html);
frame.close();
Note: 2014年に書かれた時点では、この解決策が一部のブラウザで機能していたかもしれませんが、もはや機能しません。最近のブラウザでは、HTTPSページに埋め込まれた
iframe
内のHTTP URLへのナビゲートやリダイレクトは、フレームが最初にHTTPS URLを含んでいたとしても、許可されていません。
私が作成した最良の解決策は、単にgoogleをsslプロキシとして使用することです...
https://www.google.com/search?q=%http://yourhttpsite.com&btnI=Im+Feeling+Lucky
firefoxでテストして動作しました。
その他の方法です。
embed.lyのようなサードパーティ製のものを使用します(ただし、よく知られたhttpのAPIにしか使えません)。
自分で管理しているhttpsページに独自のリダイレクトスクリプトを作成する(相対的にリンクされたページに単純なjavascriptによるリダイレクトを行うだけで十分です。以下のようなものです。(任意の言語/方法を使用することができます。)
https://example.com
これはiframeでリンクしている...
https://example.com/utilities/redirect.html
これには、以下のようなシンプルなjsリダイレクトスクリプトを使用します。
document.location.href ="http://thenonsslsite.com";
あるいは、RSSフィードを追加したり、httpサイトを読み込んでhttpsサイト内に表示するリーダー/パーサーを書いたりすることもできます。
また、httpサイトのオーナーにssl接続をするように勧めることもできますし、そうすべきです。もし他の理由がなければ、SEOを向上させるという理由で。
httpサイトのオーナーにssl証明書を作成してもらうことができなければ、最も安全で永続的な解決策は、必要なコンテンツを取得するRSSフィードを作成することでしょう(おそらく、あなたはhttpサイトで実際には何もしていない、つまりどのシステムにもログインしていないはずです)。
本当の問題は、httpsのサイトの中にhttpの要素があると、セキュリティ上の問題があるということです。このセキュリティリスクを完全に回避する方法はありませんので、上記はあくまでも現在の回避策です。
なお、ほとんどのブラウザでは、このセキュリティ対策を無効にすることができます(自分ではできますが、他人にはできません)。また、これらのハックは、時間の経過とともに陳腐化する可能性がありますのでご注意ください。
ほとんどのブラウザでは、httpsのページに安全でないコンテンツを表示しようとすると、常にブロックされたコンテンツの警告が表示されます。これは、SSLを使用していない他のサイトのコンテンツを埋め込みたい場合には厄介です。自分のブラウザで警告を消したり、ブロックを解除したりすることはできますが、他の訪問者にとっては問題となります。
一つの方法としては、コンテンツをサーバーサイドで読み込み、画像などを自分のサーバーに保存して、httpsから表示するという方法があります。
また、embed.lyのようなサービスを利用して、コンテンツを取得してみるのもいいでしょう。彼らはhttpsの後ろにコンテンツを取得するためのサポートを持っています。