Доступ запрещен как исключение при вызове функции JavaScript из Java в IE

Я получаю исключение "Отказано в доступе", когда вызываю функцию сценария Java из Java-апплета только в IE. (изменил мой оригинальный вопрос с обновленной информацией.)

Вот мой HTML-код

<script type="text/javascript">
   function uploadComplete() {
       alert("in Upload Complete");
       ju.doneUpload(true);
   }
</script>

ju объявляется глобально на той же странице, которая вызывает doneUpload из другого файла Java Script. Я включил MAYSCRIPT в тэг моего апплета.

Код Java [После добавления AccessController]:

 AccessController.doPrivileged(new PrivilegedAction<Object>() {
 public Object run() {

JSObject scriptObject = getScriptObject(uploadDialogBox.applet);
if(scriptObject != null) {
    try {
        // this is the call where it   throws an exception
       **scriptObject.call("uploadComplete", null);**
    } catch(JSException e) {
        System.out.println("exception " + e.getMessage() 
            + " WrappendException " + e.getWrappedException()
            + " stack trace " + e.getStackTrace());
    }
}
return null;
}

});

private JSObject getScriptObject(JApplet appletInstance) {
    JSObject result = null;
    // JSObject doc = null;
    try {
        result = JSObject.getWindow(appletInstance);
        // doc = (JSObject) result.getMember("document");
    } catch (JSException e) {
        System.out.println("Exception in getScriptObject : " + e.getMessage()
            + " Wrappend exception " + e.getWrappedException());
    }
    return result;
}

Это бросает JSException: Access is denied

alert функция в uploadComplete не называется. Что я здесь не так делаю?

1 ответ

Это помогает?

Резюме этого ответа на форумах Sun:

Здравствуйте, у меня была такая же проблема. Я решил, вам просто нужно реализовать метод applets следующим образом:

public void f() {
   AccessController.doPrivileged(new PrivilegedAction<Object>() {
      public Object run() {
         // do something
         return null;
      }
   });
}

Единственная проблема с этим подходом состоит в том, что когда вы вызываете метод в первый раз, для ответа требуется довольно много времени (4-5 с), и каждый раз, когда ответ происходит немедленно.

Изменить: ОК, второе потенциальное решение заключается в использовании getDocument(), как описано в этой статье. Одним словом предупреждения, в нашем тестировании мы видели, что это не всегда надежно на Firefox на Mac. Суть этого метода заключается в следующем:

getAppletContext().showDocument(new URL("javascript:uploadComplete()"));
Другие вопросы по тегам