如何检测IFRAME中SRC是否可用,不可用将IFRAME隐藏

近期开发的一个项目中需要开发如下一个功能: 需要检测一个iframe中的src是否可用如果不可用则将该iframe隐藏. 我采用的方法是通过ajax去检测,如果不可用才将该iframe隐藏,代码如下:  
<script language="javascript"> 
var isExistPage = true; 
var pageUrl = document.getElementById('frame1').src; //页面地址 
var XmlHttp= null; 
if(window.XMLHttpRequest){ 
XmlHttp= new XMLHttpRequest(); 
}else if(window.ActiveXObject){ 
XmlHttp= new ActiveXObject("Microsoft.XMLHTTP"); 

try{ 
XmlHttp.open("GET",pageUrl,false); 
XmlHttp.send(); 
if(XmlHttp.status==200){ 
isExistPage = true; 
}else{ 
isExistPage = false; } } 
catch(error){ 
isExistPage = false; 
} if(isExistPage==false){ 
document.all.frame1.style.display="none"; 

</script> 
其中frame1是iframe的id 
使用上述程序你可能会遇到如下问题:

1.页面会报js错误拒绝访问在XmlHttp.open("GET",pageUrl,false);

具体原因如下:ajax是不能够跨域访问的,如果你的iframe的地址与本服务器上的域不一致的话就会导致这种情况.

具体解决办法就是将该地址作为参数传到servlet或者是jsp中进行处理并将处理结果返回给页面.

具体代码修改如下:

<script language="javascript"> 
var isExistPage = true; 
var urlValue = Base64.encode(document.getElementById('frame<c:out value="${aCom.comForm.com_id}"/>').src);//加密该iframe的地址
var pageUrl = "/cetv/kkk.weather?url="+urlValue; //页面地址 
var XmlHttp= null; 
if(window.XMLHttpRequest){ 
      XmlHttp= new XMLHttpRequest(); 
} else if(window.ActiveXObject){ 
      XmlHttp= new ActiveXObject("Microsoft.XMLHTTP"); 
  }
      XmlHttp.open("GET",pageUrl,false);
      try{ 
      XmlHttp.send(); 
      if(XmlHttp.status==200){ 
       var str=XmlHttp.responseText;
        if(str==200)
          {
            isExistPage = true;
          }else{
                      isExistPage = false;
                   }
      }else{ 
      isExistPage = false; 
      } 
      }catch(error){ 
      isExistPage = false; 
      } 
      if(isExistPage==false){
       document.all.div<c:out value="${aCom.comForm.com_id}"/>.style.display="none";
       }

</script>

 servlet中进行处理的代码:

int responseStatus=-1;
     String getUrl = request.getParameter("url");
     getUrl = Base64Util.base64_decode(getUrl);
     if(getUrl.startsWith("/cetv")){
      responseStatus = 200;
     }else{
      HttpClient httpClient = new HttpClient(); 
      responseStatus = getServerResponseStatus(getUrl,httpClient);
     }
     System.out.println("responseStatus="+responseStatus);
  if(responseStatus == 200)
  {
   System.out.println("该url合法!");
  }
  response.getWriter().println(responseStatus);

这种方式的思路就是通过将跨域地址的ajax请求放在servlet中进行处理并将请求结果responseStatus过 response.getWriter().println(responseStatus);传到页面这样的话页面就可以通过XmlHttp.responseText;

取得这个值.

2.那么为什么要对页面中的url参数进行加密呢,原因就是url本身可以带很多个参数,如果不加密的话url自带的参数就会在servlet中request.getParameter("url");请求中消失,可以将url整体进行加密然后传过来已后再进行解密

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值