如何跟踪GWT中的JSNI错误?

con*_*ile 1 html javascript java gwt jsni

当我使用GWT JSNI时,我的JSNI JavaScript代码中可能存在错误,如下所示:

try {
...
} catch(error) {
 console.log(error);
}
Run Code Online (Sandbox Code Playgroud)

如何在GWT日志记录系统中或使用GWT uncaughtException跟踪此错误?

Tho*_*yer 5

在JSNI方法抛出的异常被暴露在Java代码为JavaScriptException小号,你可以很容易地包裹陷入JS对象的JavaScriptException,如果你需要给它需要一个异常(如GWT的API GWT.log).

try {
  …
} catch (e) {
  var ex = @com.google.gwt.core.client.JavaScriptException::new(Ljava/lang/Object;)(e);
  @com.google.gwt.core.client.GWT::log(Ljava/lang/String;Ljava/lang/Throwable;)("Error doing …", ex);
}
Run Code Online (Sandbox Code Playgroud)

在GWT 2.6.1+中,您可以使用JsonLogRecordClientUtil.throwableAsJson(e)将任何异常转换为String,例如将其发送到您的服务器或显示它.

在GWT 2.6.0+中,您可以用来GWT.reportUncaughtExceptionUncaughtExceptionHandlerif 报告任何异常,或者向浏览器报告:

try {
  …
} catch (e) {
  var ex = @com.google.gwt.core.client.JavaScriptException::new(Ljava/lang/Object;)(e);
  @com.google.gwt.core.client.GWT::reportUncaughtException(Ljava/lang/Throwable;)(ex);
}
Run Code Online (Sandbox Code Playgroud)

也就是说,在大多数情况下,您不需要这样:只需让异常在JSNI方法之外传播并捕获JavaScriptExceptionJava-land.