复制以下语句到一个HTM文件就可调试,
<html>
<script> 
function myobject(){ //一定是一个对象 
this.a="test";
this.error=error; //对象的一个方法 

function error(){ 
throw new Error(1,"this is a test error") 

</script>
<BODY> 
<IFRAME id="test" SRC="about:<HTML><script>try{ a=new top.myobject() ;a.error();
} catch(e){ alert(e.description); } </script></HTML>"></IFRAME> 
</BODY>
</html>

解决方案 »

  1.   

    我到是没有想到在javascript里面用try和catch哦。关注
      

  2.   

    1. this.error = error();
    2. error()中throw的话, 在初始myobject的时候就会当成ie的error而抛出, 应该为return
    3. 在try中将a.error()该为throw a.error()
      

  3.   

    to ansonchen(MaigcAnson) :
    在实际应用中你可能这么用吗?
    变成调用每一个函数都为
    throw a.dofunc()
      

  4.   

    我写的一个表单验证的一部分:看你有用的部分好了
    表单部分是
    <form name="form1" method="post" action="/servlet/ssss" OnSubmit="return checkform(form1)">
    <input type="text" name="f1" checktype="money" maxlength="10" DATAFLD="jdfy"/>
    <input type="text" name="f2" checktype="date" dateformat="mm/dd/yyyy" need="yes" DATAFLD="sqrq"/>
    <textarea name="f3" checktype="memo" iftran="true" minlength="2" maxlength="40" need="yes" DATAFLD="jdzt"></textarea>
    <select name="f4" onChange="changepost(document.form1.jdfzr.options[document.form1.jdfzr.selectedIndex].value)" need="yes" checktype="list" >
    </select>
    </form>
    以下代码中有异常处理:function checkform (formname) {
    for (var i=0 ; i <formname.elements.length ; i++) {
    try {
    switch (formname.elements[i].checktype) {
    case 'String':

    if (formname.elements[i].value.length < formname.elements[i].minlength) {
    throw "confirm error";
    }
    if ((formname.elements[i].value.length == 0)&&(formname.elements[i].need=="yes")) {
    throw "confirm error";
    }
    if ((formname.elements[i].iftran == 'true')&&(formname.elements[i].value.length>0)) {
    var transferrerstr =  formname.elements[i].value;
    var transferreroldchar = new Array('<','>','\"','\'');
    var transferrernewchar = new Array('&lt;','&gt;','&quot;','&#39;');
    for (var j = 0 ; j < transferreroldchar.length ; j++ ) {
    transferrerstr =  replacePattern(transferrerstr,transferrernewchar[j],transferreroldchar[j],"g");
    }
    if (transferrerstr.length > formname.elements[i].maxlength ) {
    throw "confirm error";
    }
    formname.elements[i].value = transferrerstr;
    }
    break;
    case 'date' :
    if ((formname.elements[i].need =="yes")&&(formname.elements[i].value.length==0))
    throw "confirm error";
    if (formname.elements[i].value.length > 0) {
    var datevalue = formname.elements[i].value;
    var dateformat = formname.elements[i].dateformat;
    var datelength = dateformat.length;
    var firstyear = dateformat.indexOf('y');
    var lastyear = dateformat.lastIndexOf('y');
    var firstmonth = dateformat.indexOf('m');
    var lastmonth = dateformat.lastIndexOf('m');
    var firstday = dateformat.indexOf('d');
    var lastday = dateformat.lastIndexOf('d');
    //判断年月日各字符是否均为数字
    if ((!(isnumber(datevalue.substring(firstyear,lastyear+1))))||(!(isnumber(datevalue.substring(firstmonth,firstmonth+1))))||(!(isnumber(datevalue.substring(firstday,lastday+1))))) {
    throw "confirm error";
    }
    var month = Math.floor(datevalue.substring(firstmonth,lastmonth+1));
    var day = Math.floor(datevalue.substring(firstday,lastday+1));
    if ((month<1)||(month>12)) {
    throw "confirm error";
    }
    if ((day<1)||(day>31)) {
    throw "confirm error";
    }
    }
    break;
    case 'list':
    if ((formname.elements[i].need =="yes")&&(formname.elements[i].options[formname.elements[i].selectedIndex].value.length==0))
    throw "list error";
    break;
    case 'money':
    if (formname.elements[i].value.length < formname.elements[i].minlength) 
    throw "confirm error";
    if (formname.elements[i].value.length > 0){
    var money = formname.elements[i].value;
    var comma = 0;
    var dot = 0;
    var index = 0;
    for (var j=0;j<money.length;j++ ) {
    switch (money.charAt(j)) {
    case '0':
    if (index == 0)
    throw "confirm error";
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
    index++;
    if (comma >0)
    comma++;
    if (comma > 4)
    throw "confirm error";
    break;
    case '.':
    index++;
    dot++;
    if (dot > 1)
    throw "confirm error";
    if ((comma != 0)&&(comma != 4))
    throw "confirm error";
    comma = 0;
    break;
    case ',':
    if (dot != 0)
    throw "confirm error";
    if (index == 0)
    throw "confirm error";
    index++;
    if ((comma != 0)&&(comma != 4))
    throw "confirm error";
    if (comma == 0)
    comma = 1;
    if (comma == 4)
    comma = 1;
    break;
    default:
    throw "confirm error";
    }
    }
    }
    break;
    case 'memo':
    if ((formname.elements[i].value.length == 0 )&&(formname.elements[i].need == "yes"))
    throw "confirm error";
    if ((formname.elements[i].value.length < formname.elements[i].minlength)&&(formname.elements[i].value.length != 0 ))
    throw "confirm error";
    if (formname.elements[i].value.length > formname.elements[i].maxlength)
      throw "confirm error";
    if ((formname.elements[i].iftran == 'true')&&(formname.elements[i].value.length>0)) {
    var transferrerstr =  formname.elements[i].value;
    var transferreroldchar = new Array('<','>','\"');
    var transferrernewchar = new Array('&lt;','&gt;','&quot;');
    for (var j = 0 ; j < transferreroldchar.length ; j++ ) {
    transferrerstr =  replacePattern(transferrerstr,transferrernewchar[j],transferreroldchar[j],"g");
    }
    if (transferrerstr.length > formname.elements[i].maxlength ) {
    throw "confirm error";
    }
    formname.elements[i].value = transferrerstr;
    }
    break;
    case 'int':
    if ((formname.elements[i].value.length == 0 )&&(formname.elements[i].need == "yes"))
    throw "confirm error";
    if ((formname.elements[i].value.length < formname.elements[i].minlength)&&(formname.elements[i].value.length != 0 ))
    throw "confirm error";
    if (formname.elements[i].value.length > formname.elements[i].maxlength)
      throw "confirm error";
    for (var j = 0 ; j < formname.elements[i].value.length ; j++ ) {
    var aChar = formname.elements[j].value.substring(j,j+1);
    if (aChar < "0" || aChar > "9") {
    throw "confirm error";
    }
    }
    break;
    default :
    }
    }
    catch(e){
    if (e == "confirm error"){
    if(confirm("有些输入的数据不符合要求,请选择确定然后修改,或选择取消继续提交")){
    formname.elements[i].focus();
    formname.elements[i].select();
    return false;
    }
    }
    if (e == "list error"){
    if(confirm("有些输入的数据不符合要求,请选择确定然后修改,或选择取消继续提交")){
    formname.elements[i].focus();
    return false;
    }
    }
    }
    }
    return true;
    }
      

  5.   

    to whiteclude() :
    你看懂题目没有,牛头不对马嘴,看懂后再说,K 还贴了一大堆,你以为是什么呀
      

  6.   

    呵呵,sorry这样可不可以了:main.html<script>
    function myobject() {
    this.testException = Exception("this is a test error");
    }function Exception(text){
    return Error(text);
    }
    </script><body>
    <div id="showdiv" style="width:8em;height:1em;background-color:#cdcdcd;">show iframe</div><iframe id="test" src="frame.htm"/>
    </body>frame.htm
    test exception
    <script>
    try{
    a=new top.myobject();
    throw a.testException;
    } catch(e) {
    alert(e.description);
    }
    </script>
      

  7.   

    to whiteclude() 
    sorry !
    您的方法与的ansonchen(MaigcAnson) 的方法一致
    但这会有使编程不方便例如创建一个对象 myObject
    中有十个方法,每个方法只抛出错误但不处理它我在调用时可以按下面的方法写程序try(){
        myObject.function1(...)   //调用方法  可能会抛出错误
        myObject.function2(...)   //调用方法  可能会抛出错误
        myObject.function3(...)
        myObject.function4(...)
        ......
        }
    catch(e){
        //dealwithError    //一起处理错误
         ....
        }如果按你们那么写,很麻烦的
        
      

  8.   

    应该是安全方面的原因.在一个帧(a)中调用其他帧(b)内的含有Error对象的方法会失败,干脆直接调用b的异常处理就ok了
      

  9.   

    to whiteclude():
    是微软的失误或是故意而为之 
    有相关文档吗?
      

  10.   

    文档?呵呵,我还没有来得及收集,但我想msdn上面是一定有相关内容的,
    因为帧可能还包含其它主机的页面,如果能截获其它主机的异常,是不是还可能获得一些敏感数据呢,