Iframeを含むウィジェットがあります。ユーザーはこのiframeのURLを設定できますが、URLをロードできなかった場合(URLが存在しないか、ユーザーがインターネットにアクセスできない場合)、iframeはデフォルトのオフラインページにフェイルオーバーする必要があります。
問題は、iframeをロードできるかどうかをどのように検出できるかです。 「load」イベントにサブスクライブしようとしました。しばらくしてからこのイベントが発生しない場合、フェイルオーバーしますが、Firefoxでのみ機能します。IE and Chromeは、「ページが見つかりません」が表示されたときに「load」イベントを発生させます。
現在、ブラウザには一連のセキュリティ制限があり、iframeのコンテンツ(ドメインに属していない場合)からユーザーを遠ざけています。
その機能が本当に必要な場合は、プロキシとして動作する必要があるサーバーページを構築し、URLをパラメーターとして受け取り、それが有効なURLかどうかをテストし、エラーページをリダイレクトまたは表示する必要があります。
Google経由で次のリンクを見つけました: http://wordpressapi.com/2010/01/28/check-iframes-loaded-completely-browser/
「ページが見つかりません」の問題が解決するかどうかわからない。
<script type="javascript">
var iframe = document.createElement("iframe");
iframe.src = "http://www.your_iframe.com/";
if (navigator.userAgent.indexOf("MSIE") > -1 && !window.opera) {
iframe.onreadystatechange = function(){
if (iframe.readyState == "complete"){
alert("Iframe is now loaded.");
}
};
} else {
iframe.onload = function(){
alert("Iframe is now loaded.");
};
}
</script>
私は自分で試していないので、うまくいくかどうかはわかりません。幸運を!
Iframeのコンテンツを制御すると、iframeは親にメッセージを送信できます。
parent.postMessage('iframeIsDone', '*');
親コールバックはメッセージをリッスンします。
var attachFuncEvent = "message";
var attachFunc = window.addEventListener ;
if (! window.addEventListener) {
attachFunc = window.attachEvent;
attachFuncEvent = "onmessage";
}
attachFunc(attachFuncEvent, function(event) {
if (event.data == 'iframeIsDone') { // iframe is done callback here
}
});
URLが使用可能かどうかを確認してから、iframeの実際のURLを設定するだけですか?例えばJQueryを使用
var url = "google.com"
var loading_url = "/empty.html"
document.getElementById("iframe").src = loading_url;
$.ajax({
url: url,
type: 'GET',
complete: function(e, xhr, settings){
if(e.status === 200){
document.getElementById("iframe").src = url;
}
}
});
編集:これはクロスドメインでは機能しないようです。これらの場合、ステータスコードは0です。
Iframeのコンテンツを制御できる場合(たとえば、ページに任意のコードを追加できます)、それぞれに特別な関数を実装してから、ページでその関数を呼び出してエラーをキャッチできます(経由してwindow.onerror
ハンドラー)ページがロードされなかったためにevalを介して呼び出された関数が失敗した場合。
コードの例を次に示します。 http://www.tek-tips.com/viewthread.cfm?qid=1114265&page=42
Onloadが起動したら、iframeのコンテンツを清掃して、有用なページが含まれているかどうかを確認できます。残念ながら、すべてのブラウザで異なる「ページが見つかりません」というメッセージが表示されるため、このブラウザを指定する必要があります。
詳細については、こちらをご覧ください http://roneiv.wordpress.com/2008/01/18/get-the-content-of-an-iframe-in-javascript-crossbrowser-solution-for -both-ie-and-firefox /