Подтвердить что ты не робот

Как обнаружить ошибку 404 в iframe?

Моя веб-страница использует iframe для сбора контента с других страниц. Все страницы находятся в одном домене.

На главной странице есть способ подтвердить, что все фреймы загружены, и что нет ошибки 404?

4b9b3361

Ответ 1

Статус находится только в заголовке ответа.

Страница 404 обрабатывает код состояния HTTP, который включен только в ответ сервера, отправленный в браузер, но не в актуальные window и document объекты DOM, к которым может обращаться javascript. Это означает, что, хотя вы, безусловно, можете получить код состояния и предпринять соответствующие действия, вы можете сделать это только тогда, когда ваш javascript получает ответ, например, с запросом jQuery.ajax() или XmlHttRequest для загрузки вашего "iframe" .

Надеемся, что страница 404 соответствует 404 стандартам.

Если вышеуказанное не является опцией, единственной возможной возможностью может быть проверка названия и/или тегов H для "404". Хотя это, безусловно, меньше, чем идеальный (я бы хотел увидеть "404, Movie not Found, Movie".), Это ваш единственный вариант.

$('#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
    }
});

Ответ 2

Предположим, что это ваш html

<html>
    <head></head>
    <body>
      <iframe id="iframe"></iframe>
    </body>
 </html>

Существует два сценария

  • Ваш iframe src находится в том же домене, с которого была создана ваша страница.

    Ex : page url www.example.com and iframe 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 src www.otherdomain.com/iframe
    

    Теперь браузеры не позволят вам сделать запрос на кросс-сайт из javascript-кода из-за политики перекрестного происхождения. О том, как сделать jsonp запрос.

    $(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
                }
            }
        });
    });