Javascript 可以设置;“文件名”;发生错误时显示的内联脚本标记的名称?

Javascript 可以设置;“文件名”;发生错误时显示的内联脚本标记的名称?,javascript,onerror,Javascript,Onerror,如果我有一个内联脚本,如下面的whats,其中函数foo未定义,我希望能够执行以下操作: <script fileName='foo.js'> foo(); </script> 默认情况下,除非脚本链接到外部文件,否则只列出父html文件,但如果能够在不同的脚本标记中使用内联代码来说明错误源于哪个脚本标记,那将非常好 有什么方法可以做到这一点吗?据我所知,javascript对其内部运行的HTML标记一无所知。像这样的东西对你有用吗 <script>

如果我有一个内联脚本,如下面的whats,其中函数foo未定义,我希望能够执行以下操作:

<script fileName='foo.js'>
  foo();
</script>
默认情况下,除非脚本链接到外部文件,否则只列出父html文件,但如果能够在不同的脚本标记中使用内联代码来说明错误源于哪个脚本标记,那将非常好


有什么方法可以做到这一点吗?

据我所知,javascript对其内部运行的HTML标记一无所知。像这样的东西对你有用吗

<script>
  try {
    foo();
    // the rest of the code...
  } catch (err) {
    console.log('Caught error in foo.js');
    console.error(err);
  }
</script>

试一试{
foo();
//代码的其余部分。。。
}捕捉(错误){
log('foo.js中捕获的错误');
控制台错误(err);
}

如果要将这些脚本动态添加到页面中,您应该能够使用此try/catch代码将它们包装起来,并获得所需的效果。

这会不会让人感到困惑?脚本实际上不在文件
foo.js
中,但在文档中,错误实际上表明它是。您在文档中有行号,这不足以在文档中找到脚本标记吗?不幸的是,在chrome中,如果您通过文档创建iframe。请编写chrome提供给您的行号与文档无关,而是与代码所在的脚本标记相关,因此这是不够的。请看这里:问题是,如果脚本A中的代码调用脚本B中崩溃的函数,那么它将位于脚本A的try catch中,但我想知道脚本B中发生的错误,崩溃的实际行所在的位置。如果通过body onload或类似的方式调用函数,这也不起作用,因为它将绕过try语句。这就是堆栈跟踪
控制台发出的错误。我想你可以为特定的关键字解析
err.stack
,但我不太相信。明白了,这可能是可行的,尽管我认为body onload问题仍然会绕过try-catch而成问题。如果没有人有更好的soonish,我会接受这个:)
<script>
  try {
    foo();
    // the rest of the code...
  } catch (err) {
    console.log('Caught error in foo.js');
    console.error(err);
  }
</script>