微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – PhantomJS错误处理

我很难理解PhantomJS如何处理错误.

我有一个本地安装的Apache服务器运行(xampp),当我手动访问“http://localhost/”,我得到“它的工作!页.

作为一个测试,我写了一个文件(称为forceError.js),故意导致未检查的异常:

var page = require('webpage').create(),url = 'http://localhost/';

page.onError = function(msg,trace) {
  console.log("page.onError");
  var msgStack = ['ERROR: ' + msg];
  if (trace && trace.length) {
    msgStack.push('TRACE:');
    trace.forEach(function(t) {
      msgStack.push(' -> ' + t.file + ': ' + t.line + (t.function ? ' (in function "' + t.function +'")' : ''));
    });
  }
  console.error(msgStack.join('\n'));
};

phantom.onError = function(msg,trace) {
  console.log("phantom.onError");
  var msgStack = ['PHANTOM ERROR: ' + msg];
  if (trace && trace.length) {
    msgStack.push('TRACE:');
    trace.forEach(function(t) {
      msgStack.push(' -> ' + (t.file || t.sourceURL) + ': ' + t.line + (t.function ? ' (in function ' + t.function +')' : ''));
    });
  }
  console.error(msgStack.join('\n'));
  phantom.exit(1);
};

page.open(url,function (status) {
    console.log("status: " + status);

    // an undefined function
    thisShouldForceAnError();
});

当我运行这个使用:

phantomjs.exe forceError.js

首先我得到“状态:成功”,然后进程挂起.我没有看到任何一个page.onError或phantom.onError被调用.

有没有一些属性或需要打开的东西来获得一般的错误处理?

我在Windows 7,PhantomJS版本2.0.0,并运行在我的“git bash”shell.

解决方法

在MacOS上测试并且经历了完全相同的行为,这确实有点不直观,很可能只是一个错误.奇怪的是,如果从最大范围的phantom.onError调用一个未定义的函数正确调用1.

作为一种解决方法,您可以使用try / catch来打包回调的正文.希望它会做这个工作.

只是为了澄清:如果在执行请求页面代码时发生错误(而不是幻像脚本本身),则调用page.onError.
我一直依靠page.onError一段时间,似乎工作相当稳定. (虽然有些错误只发生在phantomjs引擎中,但不在普通浏览器中.)

1实际上:“phantom.onError”无限制地打印在控制台上,因为phantomjs不支持console.error.

原文地址:https://www.jb51.cc/js/155312.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐