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.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...