我有一个包含iframe的网页。 这些iframe用于显示一些外部网站数据。
但是当这些外部服务器在网络中被阻塞时会出现问题,它会出现“代理服务器拒绝连接”的错误。 这对我来说不太好看。
我想要隐藏所有这些被屏蔽的iframe,或者想要在那里显示一些备用数据。
答案 0 :(得分:2)
无法检查网页是否已未加载。但是,可以使用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/
修改
您的代理似乎发送状态代码为200的HTTP页面。另一个选项是包含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.