0

有谁知道如何对延迟加载的 javascript 进行错误处理?我正在使用一种调用 ajax 请求并在全局范围内对代码进行评估的方法。当发生运行时错误时,它会将文件名作为我的延迟加载脚本吐出,行号是错误行加上加载脚本中我的 eval 的行号。这不会那么糟糕,除非所有的 javascript 文件都被合并到网站各个部分的模块中。围绕 javascript 文件本身的 try catch 不会捕获函数的运行时错误。有任何想法吗?Window.onerror 没有提供正确的文件名,所以它是不可能的。我需要在它被击中之前抓住它。

我在想也许我可以以编程方式在eval'd代码中的所有函数周围包含try catchs(这很丑陋),但由于它是在窗口级别完成的,我不确定如何具体和动态地访问eval'd代码. 当然,如果 javascript 是一个名为“Bob”的对象,我可以访问 window.Bob,但我需要动态地进行。

4

1 回答 1

1

我解决了这个问题,但这不是最优雅的解决方案。基本上我所做的是:
1. 网站加载后,我查看窗口中的所有对象并将它们推入一个数组。这基本上对我的代码说,忽略这些对象。

  1. 当我模块化我的代码时,我会跟踪放入模块中的文件和文件名的长度。

  2. 调制器的最后一行采用 fileLength 数组和 lineLengths 并在我的错误处理对象中调用一个函数;

  3. 错误处理代码在窗口中查找新对象。如果它们存在,则设置一个属性以匹配 fileLengths 和 fileNames;

  4. 递归遍历新对象并添加装饰函数以在它们周围进行尝试捕获。

  5. 当其中一个被击中时,向上遍历并找到属性。

  6. 根据属性计算文件和行号。

  7. 根据正确的文件和行号输出新的错误;

是的丑陋......但它的工作原理。

于 2010-09-09T12:39:15.533 回答