如何在动态添加的 <script> 标记中获取错误的行号?
How can I get the line-number of an error in a dynamically added <script> tag?
动态创建脚本元素并将其添加到页面时,我的错误不是给我脚本的行号,而是我附加脚本的行号。
下面的代码在 .js 文件中时会给您一个 document.appendChild(script)
所在行的行号错误。代码片段,如果 运行,将 return 正确的行号。他们是怎么做到的?
var script = document.createElement("script");
script.innerHTML = "\n\n\n\n\n\n\nfoo.bar"; //error should be on line 8
document.head.appendChild(script)
当你说"line number"时,你可能指的是文件的行号。但在这种情况下,它是哪个文件?您正在动态创建脚本,因此实际上没有脚本。
您正在创建的脚本仅存在于 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] }
您可以单击 <script>
转到附加元素,或单击 lines
只查看所有行的数组。
很有魅力。
动态创建脚本元素并将其添加到页面时,我的错误不是给我脚本的行号,而是我附加脚本的行号。
下面的代码在 .js 文件中时会给您一个 document.appendChild(script)
所在行的行号错误。代码片段,如果 运行,将 return 正确的行号。他们是怎么做到的?
var script = document.createElement("script");
script.innerHTML = "\n\n\n\n\n\n\nfoo.bar"; //error should be on line 8
document.head.appendChild(script)
当你说"line number"时,你可能指的是文件的行号。但在这种情况下,它是哪个文件?您正在动态创建脚本,因此实际上没有脚本。
您正在创建的脚本仅存在于 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] }
您可以单击 <script>
转到附加元素,或单击 lines
只查看所有行的数组。
很有魅力。