try....catch.....错误

xmlingo 2002-01-15 10:59:53
二个文件大致内容如下
main.htm
.....
<script>
function myobject(){ //一定是一个对象
this.error=error; //对象的一个方法
}
function error(){
this........
throw new Error(1,"this is a test error")
}
<BODY>
<IFRAME id="test" SRC="frame.htm"></IFRAME>
<BODY>

frame.htm
....
<script>
try{
a=new top.myobject()
a.error() //-------------抛出错误
}
catch(e){
alert(e.description) //-----------接错误
}
</script>

问题是 frame.htm页的catch子句中接不住错误而IE会在main.htm内提示script错误让我调试,有准能解决这个问题,(用对象不用函数)
...全文
121 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xmlingo 2002-01-29
  • 打赏
  • 举报
回复
lplp,p
xmlingo 2002-01-23
  • 打赏
  • 举报
回复
upupupupupup
whiteclude 2002-01-22
  • 打赏
  • 举报
回复
文档?呵呵,我还没有来得及收集,但我想msdn上面是一定有相关内容的,
因为帧可能还包含其它主机的页面,如果能截获其它主机的异常,是不是还可能获得一些敏感数据呢,
xmlingo 2002-01-22
  • 打赏
  • 举报
回复
to whiteclude():
是微软的失误或是故意而为之
有相关文档吗?
whiteclude 2002-01-18
  • 打赏
  • 举报
回复
应该是安全方面的原因.在一个帧(a)中调用其他帧(b)内的含有Error对象的方法会失败,干脆直接调用b的异常处理就ok了
xmlingo 2002-01-17
  • 打赏
  • 举报
回复
to whiteclude() 
sorry !
您的方法与的ansonchen(MaigcAnson) 的方法一致
但这会有使编程不方便

例如创建一个对象 myObject
中有十个方法,每个方法只抛出错误但不处理它

我在调用时可以按下面的方法写程序

try(){
myObject.function1(...) //调用方法 可能会抛出错误
myObject.function2(...) //调用方法 可能会抛出错误
myObject.function3(...)
myObject.function4(...)
......
}
catch(e){
//dealwithError //一起处理错误
....
}

如果按你们那么写,很麻烦的









whiteclude 2002-01-17
  • 打赏
  • 举报
回复
我写的一个表单验证的一部分:看你有用的部分好了
表单部分是
<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('<','>','"',''');
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('<','>','"');
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;
}
whiteclude 2002-01-17
  • 打赏
  • 举报
回复
呵呵,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>
xmlingo 2002-01-17
  • 打赏
  • 举报
回复
to whiteclude() :
你看懂题目没有,牛头不对马嘴,看懂后再说,K 还贴了一大堆,你以为是什么呀
xmlingo 2002-01-16
  • 打赏
  • 举报
回复
to ansonchen(MaigcAnson) :
在实际应用中你可能这么用吗?
变成调用每一个函数都为
throw a.dofunc()
ansonchen 2002-01-16
  • 打赏
  • 举报
回复
1. this.error = error();
2. error()中throw的话, 在初始myobject的时候就会当成ie的error而抛出, 应该为return
3. 在try中将a.error()该为throw a.error()
vincentmax 2002-01-16
  • 打赏
  • 举报
回复
我到是没有想到在javascript里面用try和catch哦。关注
ansonchen 2002-01-16
  • 打赏
  • 举报
回复
有何不妥吗,比如带个参数要返回指定的错误信息
你的意思呢?
xmlingo 2002-01-16
  • 打赏
  • 举报
回复
upupupupupppupupup
xmlingo 2002-01-15
  • 打赏
  • 举报
回复
复制以下语句到一个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>

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧