如何检测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整体进行加密然后传过来已后再进行解密

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值