我使用window.onerror
在应用程序中捕获js错误,但问题是 - 如果未打开dev工具,则在Chrome中 - 然后将url
参数传递给onerror
处理程序总是等于打开的网址。
如果打开开发工具,那么url
指向导致js错误的确切.js
文件。
你是如何处理的?有没有解决方法?
更清楚 - 这里有2个结果:
Uncaught ReferenceError: a is not defined index:122
- 这是在抓取页面后收到的Uncaught ReferenceError: a is not defined List.js:122
- 在打开dev工具获取同一页面后收到此消息。这是预期的结果 - 我已将a();
调用List.js
文件进行测试。UPD :这是为了进行功能测试(使用selenium webdriver) - 我想捕获js错误以供进一步调查。
答案 0 :(得分:1)
更多尝试的答案真的可以回答。但
Chrome最近将chrome://inspect/
添加到了便捷的网址列表中(有关完整列表,请参阅chrome://chrome-urls/
)。我遗憾地找不到关于此的推文或博客文章,但我认为这是在上个月内。该网址肯定适用于Chrome 28。
chrome://inspect/
列出所有打开的标签,其中包含检查链接,该链接会重定向回现有的打开页面,但也会打开DevTools。
我认为selenium测试可以在一个选项卡中打开测试中的站点,在第二个选项卡中打开 inspect 页面,按照inspect
链接返回测试页面但这次DevTools打开,允许window.onerror
捕获更好的错误。
类似的东西:
document.getElementsByClassName('row')[n].getElementsByTagName('a')[0].click()
答案 1 :(得分:1)
让我们提出以下架构:
window.addEventListener("error", handleException, false);
function handleException(I_sMsg) {
if (I_sMsg.stack) {
sMsg = I_sMsg.stack.replaceAll(getBaseURL(), "");
alert(sMsg);
} else if (I_sMsg.message) {
alert(I_sMsg.message);
}
return cancelEvent(I_sMsg);
}
现在任何throw new Error("description");
都会遍历if语句的第一部分,并且有一个很好的堆栈供你用网址解析。
它也适用于意外的异常,因此产生以下消息(在这种情况下,在调用未发送的bibi()
函数之后)
经过进一步调查,我的框架正在使用某种自制的作业管理(实际上是在堆栈中显示),其中每个动作都属于一个工作。
作业执行方法如下(简化)
try {
oTask.func.apply(oTask.obj, oTask.prms);
} catch(ex) {
handleException(ex);
return false;
}
因此,这意味着每个执行都封装在这个try catch块中。如您所见,捕获了异常,并将其传递给处理程序。不是错误。
我虽然它在另一个文件中工作但是因为调用是封装的,而在api.js文件中直接是一个不受框架管理的免费调用。