javascript - 在 Rhino 中捕获未处理的异常

标签 javascript exception rhino

我正在使用 Rhino 脚本引擎,想知道是否可以(以及如何)注册一个全局处理程序,每当触发未处理的异常时就可以调用该处理程序。

我知道我不能使用像 window 这样的浏览器对象来注册处理程序,例如:

window.addEventListener("error", function (e) {
  alert("Error occurred: " + e.error.message);
  return false;
})

还有其他选择吗?

最佳答案

具体取决于您想要什么以及您拥有什么,这是一种方法:

var setUncaughtExceptionHandler = function(f) {
	Packages.org.mozilla.javascript.Context.getCurrentContext().setErrorReporter(
		new JavaAdapter(
			Packages.org.mozilla.javascript.ErrorReporter,
			new function() {
				var handle = function(type) {
					return function(message,sourceName,line,lineSource,lineOffset) {
						f({
							type: type,
							message: String(message),
							sourceName: String(sourceName),
							line: line,
							lineSource: String(lineSource),
							lineOffset: lineOffset
						});
					};
				};

				["warning","error","runtimeError"].forEach(function(name) {
					this[name] = handle(name);
				},this);
			}
		)
	);
};

setUncaughtExceptionHandler(function(error) {
	Packages.java.lang.System.err.println("Caught exception: " + JSON.stringify(error,void(0),"    "));
});

var x = true;
var y = null;
var z = y.foo;

其输出是:

Caught exception: {
    "type": "error",
    "message": "uncaught JavaScript runtime exception: TypeError: Cannot read property \"foo\" from null",
    "sourceName": "null",
    "line": 0,
    "lineSource": "null",
    "lineOffset": 0
}

关于javascript - 在 Rhino 中捕获未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50975243/

相关文章:

javascript - 关闭灯箱后模态窗口覆盖仍然存在

javascript - array.sort() 和 array.sort(function(a,b) { return a - b; }) 有什么区别?

c# - 主键与唯一键冲突异常处理

java.lang.VerifyError IllformedLocaleException 异常

javascript - 嵌入式浏览器中的JS与原生代码的连接方式是什么?

java - Rhino Script Engine 的生命周期和并发语义是什么

Javascript:无法分配给 false 的只读属性 '_epoch'

javascript - Highcharts:无法读取未定义的属性 'chart'

java - 未捕获的 java.nio.channels.UnresolvedAddressException

JavaScript (Rhino) 使用库或包含其他脚本