【问题标题】:Hide the iframes whose content get blocked by proxy隐藏内容被代理阻止的 iframe
【发布时间】:2011-09-22 11:06:38
【问题描述】:

我有一个带有 iframe 的网页。 这些 iframe 用于显示一些外部网站数据。

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

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

【问题讨论】:

  • 很遗憾,您无法访问 iframe 的内容,除非它提供与父窗口相同域的内容
  • @Vlad - 但是有什么方法可以检查 iframe 的内容是否已加载?

标签: javascript jquery iframe proxy


【解决方案1】:

无法检查页面是否加载。但是,可以使用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.

【讨论】:

  • 我看到了你的代码。并将一个 iframe 编辑为 &lt;iframe src="http://www.facebook.com"&gt;&lt;/iframe&gt; www.facebook.com 这已被我的工作场所屏蔽。并且输出显示此 iframe 表示代理拒绝显示内容。 :( 怎么办?
猜你喜欢
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
  • 2016-01-02
  • 2016-05-04
  • 2016-07-28
  • 2016-11-25
  • 1970-01-01
  • 2013-04-30
相关资源
最近更新 更多