近期开发的一个项目中需要开发如下一个功能: 需要检测一个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整体进行加密然后传过来已后再进行解密