Javascript 如何在动态添加的<;中获取错误的行号;脚本>;标签
当动态创建脚本元素并将其添加到页面时,我的错误不是给我脚本的行号,而是给我附加脚本的行号 当在.js文件中时,下面的代码将给您一个行号错误,无论哪一行Javascript 如何在动态添加的<;中获取错误的行号;脚本>;标签,javascript,error-handling,line-numbers,dynamic-script-loading,Javascript,Error Handling,Line Numbers,Dynamic Script Loading,当动态创建脚本元素并将其添加到页面时,我的错误不是给我脚本的行号,而是给我附加脚本的行号 当在.js文件中时,下面的代码将给您一个行号错误,无论哪一行document.appendChild(script)处于启用状态。如果运行代码段,它将返回正确的行号。他们是怎么做到的 var script=document.createElement(“脚本”); script.innerHTML=“\n\n\n\n\n\n\nfoo.bar”//错误应该在第8行 document.head.append
document.appendChild(script)
处于启用状态。如果运行代码段,它将返回正确的行号。他们是怎么做到的
var script=document.createElement(“脚本”);
script.innerHTML=“\n\n\n\n\n\n\nfoo.bar”//错误应该在第8行
document.head.appendChild(script)
当你说“行号”时,你可能指的是文件的行号。但在这种情况下,它是哪个文件?您正在动态创建脚本,因此实际上没有脚本
您正在创建的脚本仅存在于DOM中,即代码的内存表示形式。它的行为似乎完全符合我的预期。明白了。在代码周围添加一个try-catch非常有效
catchableScript = function(scriptText) {
var scriptText = "try {\n"+scriptText+"\n} \n catch(ex){console.log(ex.lineNumber-1)}";
var script = document.createElement("script");
script.innerHTML = scriptText;
document.head.appendChild(script)
}
catchableScript("\n\n\n\n\n\n\nfoo.bar");
输出:8
此外,异常有更多有用的信息,但这就是问题的答案
编辑:
对于需要的用户,添加以下代码:
window.CURRENTLY_EVALED_SCRIPT = scriptText;
var scriptText = "try {\n"+scriptText
+"\n} catch(ex){\n"
+"var lineNumber = ex.lineNumber-1;\n"
+"var errorOut = {};\n"
+"errorOut.exception = ex;\n"
+"errorOut.lines = window.CURRENTLY_EVALED_SCRIPT.split('\\n');\n"
+"var line = errorOut.lines[lineNumber-1];\n"
+"console.log(ex.message+' on line\\n'+line+' :: '+lineNumber, window.CURRENTLY_EVALED_SCRIPT_ELEMENT, errorOut);\n"
+"}";
...
window.CURRENTLY_EVALED_SCRIPT_ELEMENT = script
将在控制台中产生此输出:
foo is not defined on line
foo.bar :: 8, <script>, Object { exception: ReferenceError, lines: Array[8] }
foo未在第行定义
foo.bar::8,对象{异常:ReferenceError,行:数组[8]}
您可以单击
转到附加元素,或者单击行
只查看所有行的数组
工作起来很有魅力。侧边栏中出现了一些问题前面的问题启发了这个问题的答案,虽然它没有真正显示出来。我想是的,但是如果你发现了错误,你可以从评估中获得一个行号。我正在检查是否可以使用window…OneError捕捉它,然后获取行号Nope。window.onerror仅使用一个字符串调用,该字符串就是错误