0

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

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

+0

也许我错过了一些东西,但为什么你的JavaScript会抛出运行时错误?即使是这样,在调用函数之前,您不能验证函数参数吗?看起来好像处理运行时错误的最佳方法是不允许它们发生。 – Sparafusile 2010-09-08 18:34:34

+0

这并不是说有运行时错误,而是在出现一个错误时,我想指定出于调试目的而抛出的内容。错误错误地表明加载脚本是问题。我正在计算正确的文件名/行号。 – g3k0 2010-09-08 19:20:27

回答

1

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

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

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

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

  4. 通过新对象递归并添加装饰函数以尝试捕捉它们。

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

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

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

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