Доступ запрещен как исключение при вызове функции 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()"));