2011-09-22 53 views
1

我有一个带iframe的网页。 这些iframe用于显示一些外部网站数据。隐藏内容被代理拦截的内嵌框架

但是,当这些外部服务器在网络中被阻塞时出现问题,它会给出“代理服务器拒绝连接”的错误。 这对我来说并不好看。

我想隐藏所有这些被阻止的iframe,或者想在那里显示一些替代数据。

+1

不幸的是,除非它提供来自同一个域作为父窗口 –

+0

@Vlad内容则无法访问一个iframe的内容 - 但就是有什么办法来检查iframe的内容是否已被加载? – Abhishek

回答

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/

编辑
您的代理似乎发送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. 
+0

我看到了你的代码。并编辑了一个iframe作为 '