当动态创建脚本元素并将其添加到页面时,我的错误不是给我脚本的行号,而是给我追加脚本的行号。

下面的代码在.js文件中时,将为您显示document.appendChild(script)行所在的行号错误。如果运行该代码段,将返回正确的行号。他们如何做到这一点?

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)

最佳答案

得到它了。在代码周围添加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仅查看所有行的数组。

奇迹般有效。

08-25 05:36