Исключительно игнорирование netscape.javascript.JSException во время разработки - PullRequest
1 голос
/ 22 марта 2009

Eclipse позволяет отлаживать апплеты, используя sun.applet.AppletViewer . Он фактически запустит апплет, запустит его и эмулирует полное время выполнения браузера. Если в вашем апплете есть код манипулирования javascript, это вызовет JSException, поскольку текущий контекст не является реальным механизмом с поддержкой JS.

Как бы вы решили эту проблему? Я вижу несколько возможных путей:

  1. Обернуть исключение в try {} catch () и игнорировать его - не очень хорошая практика.
  2. Пропуск и флаг среды, который сообщал бы коду, что мы в данный момент находимся в режиме отладки, так что он не будет пытаться выполнить код JS - хорошо, но потребуется ручное вмешательство от каждого разработчика.
  3. Определить текущий контекст не является браузером - Как?
  4. Найдите другой AppletViewer, который может эмулировать полное поведение браузера, включая JS - есть?
  5. Подробнее

Спасибо за ваши идеи.

Ответы [ 2 ]

1 голос
/ 23 марта 2009

Не отказоустойчивое, но работоспособное решение, которое мне удалось придумать:

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(...);
    }
}
0 голосов
/ 19 ноября 2009

В некоторых старых браузерах JSObject генерирует общие RuntimeExceptions вместо JSException. Так что вы можете захотеть добавить свою сеть немного шире и оставить хороший комментарий в ваших обёртках.

...