如何捕获这种异常?

悬赏:5 发布时间:2008-07-19 提问人:love2java (初级程序员)

简单的代码,

try
{
document.open('c:/test.html','_blank','toolbar=0,location=0,direct=0,menubar=0'); 
}
catch(err)
{
    alert("not found file!");
}

如果test.html文件不存在的话,会先有一个IE的错误对话框,说“无法找到file:///c:/test.html,请确保路径或许Internet地址正确”,点确定后才弹出自定义的对话框。

请问当文件不存在时,如何不显示第一个IE错误而直接显示第二个提示?

ps:不会发图,寒。。。。

采纳的答案

2008-07-19 ham (资深程序员)

先使用Ajax请求那个页面。然后获取请求的状态码。如:
//判断是否存在页面。url为请求路径,
//succAction为存在时执行的操作,
//failAction为失败时执行的操作。
function isExists(url,succAction,failAction){
    ...
    xmlHttp.open("GET",url,true);
    xmlHttp.onreadystatechange=function(){
        if(xmlHttp.readyState==4){//readyState为4则是接收到响应
            if(xmlHttp.status==404){
               eval(failAction);
           }else if(xmlHttp.status==200){
               eval(succAction);
           }else{
               alert("出现未知错误");
           }
           xmlHttp.close();
        }
    }
    xmlHttp.send(null);
    ...
}
...
var url="c:/test.html";
isExists(
url,
"window.open("+url+",'_blank','toolbar=0,location=0,direct=0,menubar=0');",
alert("页面不存在!");
);
...

我的思路就是上面这样的过程。

也许还有其它的办法来实现。不过本人暂还没有想到。

提问者对于答案的评价:
星期天看Ajax时看到例子,它是往页面写readystate和status的,既然它往页面写东西,如果它找不到这个页面会发生什么呢?状态一定会不一样!与Ham的想到一块,还是感谢Ham的关注与分享!

其他回答

上面的最后那句alert();应该是这样:
"alert('页面不存在!')"
ham (资深程序员) 2008-07-19