Скрыть фреймы, чей контент заблокирован прокси - PullRequest
1 голос
/ 22 сентября 2011

У меня есть веб-страница с фреймами.Эти iframes предназначены для отображения некоторых внешних данных веб-сайта.

Но проблема возникает, когда эти внешние серверы блокируются в сети, выдает ошибку «Прокси-сервер отказывает в соединениях».Это не выглядит хорошо для меня.

Я хочу скрыть все эти заблокированные фреймы или показать там альтернативные данные.

1 Ответ

2 голосов
/ 22 сентября 2011

Невозможно проверить, загружена ли страница , не . Однако можно использовать onload обработчики событий.

Важно не полагаться на JQuery, потому что JQuery также является внешним источником, который должен быть загружен. Добавьте этот код в <script> теги после последнего элемента IFRAME (часто в конце тела). Код:

//Cannot rely on JQuery, as it has to be loaded
(function(){//Anonymous wrapper.
    var iframes = document.getElementsByTagName("iframe");
    var num_frames = iframes.length;
    //Function to add Event handlers
    var addLoad = window.addEventListener ? function(elem, func){
        elem.addEventListener("load", func, true);
    } : window.attachEvent ? function(elem, func){
        elem.attachEvent("onload", func);
    } : function(elem, func){
        elem.onload = func;
    };
    var success_load = 0;
    for(var i=0; i<num_frames; i++){
        addLoad(iframes[i], function(){
            this.dataSuccessfullyLoaded = true;
            success_load++;
        });
    }
    addLoad(window, function(){
         if(success_load < num_frames){
             for(var i=num_frames-1; i>=0; i--){
                 if(!iframes[i].dataSuccessfullyLoaded){
                     iframes[i].parentNode.removeChild(iframes[i]);
                     //Or: iframes[i].style.display = "none";
                 }
             }
         }
    });
})();

Скрипка: http://jsfiddle.net/3vnrg/

РЕДАКТИРОВАТЬ
Похоже, ваш прокси-сервер отправляет HTTP-страницы с кодом состояния 200. Другой вариант - включить файл CSS и проверить, существует ли переменная CSS:

/*From http://static.ak.fbcdn.net/rsrc.php/v1/yb/r/CeiiYqUQjle.css*/
#facebook .hidden_elem{display:none !important}
#facebook .invisible_elem{visibility:hidden}

HTML:

<link rel="Stylesheet" href="http://static.ak.fbcdn.net/rsrc.php/v1/yb/r/CeiiYqUQjle.css" />
<div id="facebook"><div class="hidden_elem invisible_elem"></div></div>

JavaScript (выполнить этот код после загрузки всех ресурсов):

if($("#facebook div").css("display") != "none" || $("#facebook div").css("visibility") != "hidden") disableFBFrame();
// Where disableFBFrame(); is a function which hides the frame.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...