私の Web ページでは、iframe を使用して他のページからコンテンツを収集しています。すべてのページは同じドメインにあります。
メイン ページから、すべての iframe が読み込まれ、404 エラーがないことを確認する方法はありますか?
私の Web ページでは、iframe を使用して他のページからコンテンツを収集しています。すべてのページは同じドメインにあります。
メイン ページから、すべての iframe が読み込まれ、404 エラーがないことを確認する方法はありますか?
404 ページはHTTP ステータス コードを処理しています。これは、ブラウザに送信されるサーバーの応答にのみ含まれますが、javascript がアクセスする可能性のある DOMの実際のwindow
およびオブジェクトには含まれません。これは、確かにステータスコードを収集して適切なアクションを実行できる一方で、 jQuery.ajax() リクエストやXmlHttRequest を使用して "iframe" をロードするdocument
など、JavaScript が応答を受信している場合にのみ実行できることを意味します。
上記がオプションでない場合、他の唯一の可能性は、「 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 request を使用して、リソースが利用可能かどうかを確認できます
$(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
}
}
});
});