page.onError语言 - trace 始终是一个空对象



phantomjs的文档中,他们说:

错误处理为了轻松捕获网页中发生的错误,无论是语法错误还是其他引发的异常,都添加了 WebPage 对象的 onError 处理程序。此类处理程序的示例如下:

page.onError = function (msg, trace) {
    console.log(msg);
    trace.forEach(function(item) {
        console.log('  ', item.file, ':', item.line);
    })
}

现在,如果页面打开一个包含一些 JavaScript 异常的站点,则会打印出详细信息(包括堆栈跟踪)。

好吧,我已经创建了一些"损坏"的页面(javascript导致异常的页面),我得到了引发但跟踪中没有任何内容的错误

有人可以帮忙吗?

以下是我遇到的一个案例示例:

.html:

<!docType>
<html><head></head>
<body>
<script src='broken.js'></script> 
</body>
</html>

脚本:坏了.js

1. // this script is broken at line 5.
2. // 
3. var i=20;
4. 
5. i = somethingThatDontExist
6. 
7. // we will never be here...
8. 

您可能在测试设置中遗漏了一些内容,但一切正常。您可能忘记了phantomJS调用是异步的。

这是我的测试设置:

测试.html

<!docType>
<html><head></head>
  <body>
    <script src='broken.js'></script>
  </body>
</html>

坏了.js

var i = 20;
i = somethingThatDontExist;

测试错误.js

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) 用于console.log的 API 在 phantomjs 2.1.1 和 2.5.0 之间发生了变化。 在 2.5.0 中,console.log只打印第一个参数(在 2.1.1 中,它将打印所有参数)。

为了安全起见,首先尝试构建一个字符串并将其记录为单个参数,以确保这不仅仅是一个日志记录问题。 即console.log(concatenatedString)console.log(var1, var2, var3,...)

如果要连接对象和数组,请使用 JSON.stringify(object)

2)根据我的经验,phantomjs在如何捕获页面上下文中的错误方面不一致。

例如,如果(在页面中)一个javascript catchblock执行console.log('message', error),phantomjs page.onConsoleMessage回调将获得消息的字符串和一个字符串"[对象对象]"...因此,有关该对象中包含的错误的任何数据都会在页面上下文和 PhantomJS 之间丢失。

console.error可能与console.log有不同的行为,但我没有测试它。

3)目前page.onError在Phantomjs 2.5.0中被破坏了。 它永远不会被调用,而是错误显示在page.onConsoleMessage中,但错过了错误对象(参见#2)。

现在使用 phantomjs 2.1.1 如果你真的需要知道页面上是否有 javascript 错误。

请参阅下面的错误以获取重现代码,该代码说明了 2.1.1 和 2.5.0 在 page.onErrorpage.onResourceErrorpage.onConsoleMessage 方面的差异。

https://github.com/ariya/phantomjs/issues/14776

相关内容

  • 没有找到相关文章

最新更新