phantomjs-page.onError-trace始终是空对象吗?
在phantomjs的文档中,他们说: 错误处理 为了轻松捕获网页中发生的错误(无论是语法错误还是其他抛出的异常),已为网页对象添加了OneError处理程序。此类处理程序的一个示例是: 现在,如果页面打开一个包含一些JavaScript异常的站点,那么将打印出详细信息(包括堆栈跟踪) 好吧,我创建了一些“坏”页面(javascript导致异常的页面),我得到了 抛出的错误,但跟踪中没有任何内容 有人能帮忙吗 以下是我的一个案例: html:phantomjs-page.onError-trace始终是空对象吗?,phantomjs,Phantomjs,在phantomjs的文档中,他们说: 错误处理 为了轻松捕获网页中发生的错误(无论是语法错误还是其他抛出的异常),已为网页对象添加了OneError处理程序。此类处理程序的一个示例是: 现在,如果页面打开一个包含一些JavaScript异常的站点,那么将打印出详细信息(包括堆栈跟踪) 好吧,我创建了一些“坏”页面(javascript导致异常的页面),我得到了 抛出的错误,但跟踪中没有任何内容 有人能帮忙吗 以下是我的一个案例: html: <!docType> <html&
<!docType>
<html><head></head>
<body>
<script src='broken.js'></script>
</body>
</html>
您可能错过了一些测试设置,但一切正常。您可能忘记了phantomJS调用是异步的 以下是我的测试设置: test.html
<!docType>
<html><head></head>
<body>
<script src='broken.js'></script>
</body>
</html>
testError.js
var i = 20;
i = somethingThatDontExist;
var page = require('webpage').create();
page.onError = function (msg, trace) {
console.log(msg);
trace.forEach(function(item) {
console.log(' ', item.file, ':', item.line);
})
}
page.open('test.html',function(){phantom.exit()});
这是一个老问题,但仍然是一个问题(我最近遇到了这个问题)。OP可能使用的是旧版本 有几件事需要检查 1)控制台.log的API在phantomjs 2.1.1和2.5.0之间发生了变化。在2.5.0
console.log中,只打印第一个参数(在2.1.1中,它将打印所有参数)。
为了安全起见,请尝试先构建一个字符串,并将其作为单个参数记录,以确保这不仅仅是一个日志记录问题。ieconsole.log(concatenatedString)
notconsole.log(var1,var2,var3,…)
如果要连接对象和数组,请使用JSON.stringify(object)
2)根据我的经验,phantomjs在如何捕获页面上下文中的错误方面是不一致的。
例如,如果(在页面中)javascript catchblock执行console.log('message',error)
,则phantomjspage.onConsoleMessage
回调将获得消息字符串和字符串“[object object]”……因此,该对象中包含的有关错误的任何数据在页面上下文和phantomjs之间丢失
(console.error
可能具有与console.log
不同的行为,但我没有测试它。)
3)page.onError
目前在phantomjs 2.5.0中被破坏。它从未被调用,相反,错误会显示在页面中。OnConsolleMessage
但是错过了错误对象(请参见#2)。
如果您真的需要知道页面上是否存在javascript错误,请暂时使用phantomjs 2.1.1
请参阅下面的错误,了解说明2.1.1和2.5.0之间在page.onError
、page.onResourceError
和page.onConsolleMessage
方面的差异的重新编译代码
你能提供一个可复制的测试用例吗?@AriyaHidayat是的,当然。我已经在我的查询中添加了。非常感谢您的参与。@Zo72您检查过我的答案了吗?
var i = 20;
i = somethingThatDontExist;
var page = require('webpage').create();
page.onError = function (msg, trace) {
console.log(msg);
trace.forEach(function(item) {
console.log(' ', item.file, ':', item.line);
})
}
page.open('test.html',function(){phantom.exit()});