有没有人有任何想法如何在延迟加载的JavaScript上进行错误处理?我正在使用一种方法,在该方法中调用ajax请求并在全局范围内对代码进行评估。当发生运行时错误时,它会将文件名作为我的延迟加载脚本吐出,行号是错误行加上我的加载脚本中我的eval的行号。除非所有的javascript文件都合并到网站各部分的模块中,否则这不会太糟糕。尝试捕获javascript文件本身不会捕获函数的运行时错误。有任何想法吗? Window.onerror没有提供正确的文件名,所以它是不可能的。我需要在被击中之前抓住它。
我在想,也许我可以通过编程方式包含对eval'd代码中所有函数的试用(这很丑陋),但由于它是在窗口级完成的,我不知道如何访问eval'd代码具体而动态地。当然,如果javascript是一个名为“Bob”的对象,我可以访问window.Bob,但我需要动态地进行。
答案 0 :(得分:1)
我解决了这个问题,但这不是最优雅的解决方案。基本上我做的是这个:
1.站点加载后,我查看窗口中的所有对象并将它们推入一个数组。这基本上对我的代码说,忽略这些对象。
当我模块化我的代码时,我会跟踪放入模块的文件和文件名的长度。
modulizer的最后一行使用fileLength数组和lineLengths并在我的错误处理对象中调用一个函数;
错误处理代码在窗口中查找新对象。如果存在,请设置一个属性以匹配fileLengths和fileNames;
通过新对象进行递归并添加装饰函数以尝试捕获它们。
当其中一个捕获量被击中时,向上移动并找到属性。
根据属性计算文件和行号。
根据正确的文件和行号输出新错误;
是丑陋的......但它确实有效。