私のWebページはiframeを使用して他のページからコンテンツを収集します。すべてのページは同じドメインにあります。
メインページから、すべてのiframeが読み込まれ、404エラーがないことを確認する方法はありますか?
404ページは HTTPステータスコード を処理します。これは、ブラウザに送信されるサーバーの応答にのみ含まれ、実際のwindow
およびdocument
オブジェクトには含まれませんjavascriptがアクセスできるDOM。これは、ステータスコードを収集して適切なアクションを実行できることは確かですが、 jQuery.ajax()request または- 「iframe」をロードするXmlHttRequest 。
上記が選択肢でない場合、他の唯一の可能性は、「404」のタイトルやHタグをチェックすることです。これは間違いなく理想的とは言えませんが(「404、ムービーが見つかりません、ムービー。」)、それが唯一の選択肢です。
$('#iframe').load(function (e) {
var iframe = $("#iframe")[0];
if ( iframe.innerHTML() ) {
// get and check the Title (and H tags if you want)
var ifTitle = iframe.contentDocument.title;
if ( ifTitle.indexOf("404")>=0 ) {
// we have a winner! probably a 404 page!
}
} else {
// didn't load
}
});
これがあなたのhtmlだとします
<html>
<head></head>
<body>
<iframe id="iframe"></iframe>
</body>
</html>
2つのシナリオがあります
Iframeのsrcは、ページの作成元と同じドメインにあります。
Ex : page url www.example.com and iframe's src www.example.com/iframe
JQuery ajaxリクエストを使用して、リソースが利用可能かどうかを確認できます。
$(function() {
$.ajax({
type : "HEAD",
async : true,
url : "www.example.com/iframe"
})
.success(function() {
$("#iframe").attr("src", "www.example.com/iframe");
})
.error(function(){
// Handle error perhaps a failover url
})
});
Iframeのsrcは、ページの作成元と同じドメインを指していません。
Ex : Page url www.example.com and iframe's src www.otherdomain.com/iframe
ブラウザは、 クロスオリジンポリシー が原因で、javascriptコードからクロスサイトリクエストを行うことができなくなりました。回避策は jsonp request を作成することです。
$(function() {
$.ajax({
url: "www.otherdomain.com/iframe",
dataType: "jsonp",
timeout: 5000,
success: function () {
$("#iframe").attr("src", "www.otherdomain.com/iframe");
},
error: function (parsedjson) {
if(parsedjson.status == "200") {
$("#iframe").attr("src", "www.otherdomain.com/iframe");
} else {
// Handle error
}
}
});
});