在开发过程中忽略了netscape.javascript.JSException

时间:2009-03-22 14:47:45

标签: javascript eclipse applet wrapping appletviewer

Eclipse允许您使用 sun.applet.AppletViewer 调试applet。它实际上将启动applet,运行它并模拟完整的浏览器运行时。如果您的applet中有javascript操作代码,这将导致JSException,因为当前上下文不是真正的JS启用引擎。

您如何解决这个问题?我可以看到几条可能的路径:

  1. 在try {} catch()中包装异常并忽略它 - 不好练习。
  2. 传递和环境标志,它会告诉我们当前处于调试模式的代码,因此它不会尝试执行JS代码 - 好的但需要每个开发人员的手动干预。
  3. 识别当前上下文不是浏览器 - 如何?
  4. 找到另一个可以模拟完整浏览器行为的AppletViewer,包括JS - 是吗?
  5. 更多?
  6. 感谢您的想法。

2 个答案:

答案 0 :(得分:1)

不是故障安全,而是我设法提出的可行解决方案:

private void notifySelectionState(){
    JSObject jsObject = null;

    try {
        jsObject = JSObject.getWindow(applet);

        // An exception can be thrown here (hopefully) only is running in debug environment...
    } catch (JSException e) {
        // So actually what I'm doing here is checking (in a very lame fashion) for if I'm in a the browser
        // content or in the AppletViewer
    } 

    if (jsObject != null) {
        jsObject.call(...);
    }
}

答案 1 :(得分:0)

在某些较旧的浏览器上,JSObject将抛出通用的RuntimeExceptions而不是JSException。因此,您可能希望将网络更宽一些,并在包装​​器中留下好评。