`

用 onerror 获取错误信息

    博客分类:
  • js
阅读更多
这个东西是在线写 js 脚本的时候,用来即时查错的东西!

也就是,当发现所编写的脚本有问题的时候会有相应的提示,并且在源代码框中高亮标示出错行,方便除错

〈HTML>
〈HEAD>
〈TITLE>Debug Textarea〈/TITLE>
〈meta http-equiv='Content-Type' content='text/html; charset=gb2312'>
〈/HEAD>
〈style>
* {
font-size: 12px
}
body {
margin: 10px; padding: 0px
}
table.list{
cursor: default;
border:1px solid #cccccc
background-color: #cccccc;
border-collapse: collapse;
border-Color: #cccccc;
}
〈/style>
〈script language="javascript">
// Coded by windy_sk 〈windy_sk@126.com> 20040205

function reportError(msg,url,line) {
var str = "You have found an error as below: \n\n";
str += "Err: " + msg + " on line: " + line;
alert(str);
return true;
}

window.onerror = reportError;


document.onkeydown = function() {
if(event.ctrlKey){
  switch(event.keyCode) {
   case 82: //r
    runcode();
    break;
   case 83: //s
    savecode();
    break;
   case 71: //g
    goto(prompt('Please input the line number', '1'));
    break;
   case 65: //a
    document.execCommand("SelectAll");
    break;
   case 67: //c
    document.execCommand("Copy");
    break;
   case 88: //x
    document.execCommand("Cut");
    break;
   case 86: //v
    document.execCommand("Paste");
    break;
   case 90: //z
    document.execCommand("Undo");
    break;
   case 89: //y
    document.execCommand("Redo");
    break;
   default:
    break;
  }
  event.keyCode = 0;
  event.returnValue = false;
}
return;
}


function show_ln(){
var txt_ln  = document.getElementById('txt_ln');
var txt_main  = document.getElementById('txt_main');
txt_ln.scrollTop = txt_main.scrollTop;
while(txt_ln.scrollTop != txt_main.scrollTop) {
  txt_ln.value += (i++) + '\n';
  txt_ln.scrollTop = txt_main.scrollTop;
}
return;
}


function editTab(){
var code, sel, tmp, r;
event.returnValue = false;
sel =event.srcElement.document.selection.createRange();
r = event.srcElement.createTextRange();

switch (event.keyCode){
  case (8) :
   if (!(sel.getClientRects().length > 1)){
    event.returnValue = true;
    return;
   }
   code = sel.text;
   tmp = sel.duplicate();
   tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top);
   if(sel.parentElement() != tmp.parentElement()) return;;
   sel.setEndPoint('startToStart', tmp);
   sel.text = sel.text.replace(/^\t/gm, '');
   code = code.replace(/^\t/gm, '').replace(/\r\n/g, '\r');
   r.findText(code);
   r.select();
   break;
  case (9) :
   if (sel.getClientRects().length > 1){
    code = sel.text;
    tmp = sel.duplicate();
    tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top);
    if(sel.parentElement() != tmp.parentElement()) return;
    sel.setEndPoint('startToStart', tmp);
    sel.text = '\t'+sel.text.replace(/\r\n/g, '\r\t');
    code = code.replace(/\r\n/g, '\r\t');
    r.findText(code);
    r.select();
   }else{
    sel.text = '\t';
    sel.select();
   }
   break
  case (13) :
   tmp = sel.duplicate();
   tmp.moveToPoint(r.getBoundingClientRect().left, sel.getClientRects()[0].top);
   if(sel.parentElement() != tmp.parentElement()) return;
   tmp.setEndPoint('endToEnd', sel);
   sel.text = '\r\n' + tmp.text.replace(tmp.text.replace(/^[\t ]+/g, ""),"");
   sel.select();
   break;
  default  :
   event.returnValue = true;
   break;
}
return;
}


function runcode() {
var str = document.getElementById("txt_main").value;
var code_win = window.open('about:blank');
code_win.document.open();
code_win.document.writeln("〈script>");
code_win.document.writeln("function reportError(msg,url,line){\nline-=14;\nvar str='You have found an error as below: \\n\\n';\nstr+='Err: '+msg+' on line: '+(line);\nalert(str);\nopener.goto(line);\nopener.focus();\nwindow.onerror=null;\nsetTimeout('self.close()',10);\nreturn true;\n}");
code_win.document.writeln("window.onerror = reportError;");
code_win.document.writeln("〈\/script>");
code_win.document.writeln(str);
code_win.document.close();
return;
}


function savecode() {
var str = document.getElementById("txt_main").value;
var code_win = window.open('about:blank','_blank','top=10000');
code_win.document.open();
code_win.document.writeln(str);
code_win.document.close();
code_win.document.execCommand('saveas','','code.html');
code_win.close();
return;
}


function goto(ln) {
if(!/^\d+$/.test(ln) || ln==0) return;
var obj = document.getElementById("txt_main");
var rng = obj.createTextRange();
var arr = obj.value.split(/\n/);
if(ln>arr.length) ln = arr.length;
var str_tmp = "";
for(var i=0; i〈ln-1; i++) {
  str_tmp += arr[i];
}
rng.moveStart('character',str_tmp.length);
str_tmp = "";
for(i=ln; i〈arr.length; i++) {
  str_tmp += arr[i];
}
rng.moveEnd('character',-str_tmp.length);
rng.select();
return;
}

window.onload = function() {document.getElementById("txt_main").value = "〈script>\nalert(')\n〈\/script>";}
〈/script>
〈BODY>
〈table width='600' class='list' border='1' bgcolor='#eeeeee' bordercolorlight='#000000' bordercolordark='#FFFFFF' cellpadding='0' cellspacing='0'>
  〈tr bgcolor='#cccccc'>
    〈td colspan='2' height='20' align='center'>〈b>Debug Textarea〈/b>〈/td>
  〈/tr>
  〈tr>
    〈td colspan='2'>
        〈table width='95%' border='0' align='center' >
   〈tr>
     〈td align='center'>〈br />
       〈textarea id='txt_ln' name='content' rows='10' style='width:40px;overflow:hidden;height:200px;border-right:0px;text-align:right;line-height:14px' onselectstart='this.nextSibling.focus();return false' readonly>〈/textarea>〈textarea id='txt_main' name='content' rows='10' cols='80' onkeydown='editTab()' onkeyup='show_ln()' onscroll='show_ln()' wrap='off' style='overflow:auto;height:200px;padding-left:5px;border-left:0px;line-height:14px'>〈/textarea>
       〈script>for(var i=1; i〈=20; i++) document.getElementById('txt_ln').value += i + '\n';〈/script>
     〈/td>
   〈/tr>
          〈tr>
            〈td align='center'>〈br />
              〈input type='button' value=' 运 行 ' onclick='runcode()' accesskey='r'> 
              〈input type='button' value=' 保 存 ' onclick='savecode()' accesskey='s'> 
              〈input type='button' value=' 跳 转 ' onclick="goto(prompt('Please input the line number', '1'))"  accesskey='g'> 
            〈/td>
          〈/tr>
        〈/table>
    〈/td>
  〈/tr>
〈/table>
〈/BODY>
〈/HTML>


分享到:
评论

相关推荐

    js注意img图片的onerror事件的分析

    打开网页时提示 Stack overflow at line: 0。img图片的onerror事件需要注意的细节。

    前端开源库-bell-on-bundler-error-plugin

    前端开源库-bell-on-bundler-error-pluginBell on Bundler错误插件,获取Bundler构建错误通知。在这种情况下,一个贝尔字符将被写入stderr输出。

    vba常用英文

    (3) On Error Resume Next '忽略错误继续执行VBA代码,避免出现错误消息 (4) On Error GoTo 100 '当错误发生时跳转到过程中的某个位置 (5) On Error GoTo 0 '恢复正常的错误提示 (6) Application.DisplayAlerts=False...

    EXCEL VBA常用语句300句

    使用 On Error GoTo ErrorHandler 可以在错误发生时跳转到指定的错误处理程序中,从而能够处理错误。 5. Application.DisplayAlerts=False:在程序执行过程中使出现的警告框不显示。 使用 Application.Display...

    asp会员注册登录以管理系统网页实例.doc

    在本文档中,我们使用了 On Error Resume Next 语句来捕获错误,并使用 err 对象来获取错误信息。当我们执行数据操作时,如果出现错误,我们就使用 err 对象来获取错误信息,并将其显示在页面上。 六、页面布局 在...

    javascript [removed]事件学习新收获

    在捕获js错误时,我们通常使用try{}catch(e){}的方式,然后通过e.errorMessage等方式获取错误信息然后报告错误。但对于onerror事件可能很少问津,我们是否思考过如何报告错误所在的行号?如果想过这个是否也被这个...

    DELL-服务器系统提示错误解决的若干办法.doc

    在 DELL 服务器系统中,可能会出现各种错误信息,影响服务器的稳定运行。以下是常见的错误信息及其解决方法: 1. Alert! iDRAC6 not responding. 解决方法:等待系统重新引导。如果问题仍然存在,请检查 iDRAC6 ...

    python获取目录下所有文件的方法

    本文实例讲述了python获取目录下所有文件的方法。...3. 参数onerror的默认值是”None”,表示忽略文件遍历时产生的错误.如果不为空,则提供一个自定义函数提示错误信息后继续遍历或抛出异常中止遍历

    WinHttp.WinHttpRequest.5.1中文参考手册

    * OnError:发生错误时触发的事件,可以捕捉到应用程序运行时的错误。 * OnResponseDataAvailable:当响应数据可用时触发的事件,可以在数据可用时对响应数据进行处理。 * OnResponseFinished:当响应数据完成时触发...

    ExcelVBA语句集300.pdf

    On Error Resume Next 语句忽略错误继续执行 VBA 代码,避免出现错误消息。On Error GoTo ErrorHandler 语句当错误发生时跳转到过程中的某个位置。On Error GoTo 0 语句恢复正常的错误提示。 应用程序设置 应用...

    [removed]()的用法与实例分析

    onerror语法使用 onerror 默认有三个入参: •msg: 错误信息 •url:错误所在文件 •line: 错误所在代码行,整型 [removed] = function(msg, url, line){ // some code }; 对于 <body onerror=”some code”&gt...

    Mui+html+js+全端电商+毕业设计

    图片如果加载不成功显示默认图片 onerror="失败的时候去替换原来错误的地址 为默认图片的地址" onerror="this.src = 'images/none.jpg' " 搜索页 静态页面 搜索表单 包含了搜索框和按钮 历史搜索 两种情况 没有...

    Python获取apk文件URL地址实例

    工作中经常需要提取apk文件的特定URL地址,如是想到用Python脚本进行自动处理。...(3)参数onerror默认值为”None”,表示忽略文件遍历时的错误。如果不为空,则提供一个自定义函数提示错误信息后继续遍历或抛出

    word格式模板:EXCEL-VBA-常用语句400句.docx

    * 忽略错误继续执行 VBA 代码,避免出现错误消息:On Error Resume Next * 当错误发生时跳转到过程中的某个位置:On Error GoTo ErrorHandler * 恢复正常的错误提示:On Error GoTo 0 工作簿操作 工作簿是VBA中的...

    BIOS信息详解

    BIOS信息详解 1.CMOS battery failed 中文:CMOS电池失效。 解释:这说明CMOS电池已经快没电了,只要更换新的电池即可。 2.CMOS check sum error-Defaults loaded 中文:CMOS 执行全部检查时发现错误,...

    perl-swml-parser:SWML解析器

    姓名SWML :: Parser-SWML文本文档解析器概要use SWML::Parser;... $ parser-> onerror($ code) $ code = $ parser-> onerror 获取或设置错误处理程序。 请注意,此版本的SWML解析器根本不会报告任何错误。 $ par

    sql注入学习入门篇

    * Error-based注入:使用错误信息来获取数据库信息。 * Boolean-based注入:使用布尔值来判断注入点的存在。 * Time-based注入:使用时间延迟来判断注入点的存在。 而在SQL Server数据库中,我们可以使用以下几种...

    前端模块加载解决方案modJS.zip

    如果加载错误或者网络超时,onerror将被触发。超时时间可以通过require.timeout设置,默认为5000(ms)。使用require.async获取的模块不会被发布工具安排在预加载中,因此在完成回调之前require将会抛出模块未定义错误...

    js学习笔记大全

    * 使用时用: c$.函数名(参数列表); 或者 c$().函数名(参数列表) * 字符串操作函数、日期操作函数、数组操作函数等,直接增加到 String、Date、Array 类里面,便于直接使用 */ /** * 获取元素,或者在DOM加载完成...

    VISUAL BASIC 编程标准

    6.3.1 使用On Resume Next以忽略错误 62 6.3.2 使用On Error GoTo转移执行的代 码流 64 6.3.3 错误处理程序与调用栈 68 6.3.4 使用On Error GoTo 0,在运行时 取消错误处理程序的激活状态 69 6.3.5 用调试方式激活...

Global site tag (gtag.js) - Google Analytics