当我仅在IE中从Java Applet调用Java脚本函数时,我得到了Access Denied异常。 (用最新信息修改了我的原始问题。)
这是我的HTML代码
<script type="text/javascript">
function uploadComplete() {
alert("in Upload Complete");
ju.doneUpload(true);
}
</script>
ju
在同一页面中全局声明,该页面从不同的JavaScript文件调用doneUpload。我在我的applet标签中包含了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
函数。我在这做错了什么?
答案 0 :(得分:1)
this有帮助吗?
Sun论坛上该答案的摘要:
你好,我有同样的问题。我解决了它,你只需要实现这样的applets方法:
public void f() {
AccessController.doPrivileged(new PrivilegedAction<Object>() {
public Object run() {
// do something
return null;
}
});
}
这种方法的唯一问题是,当你第一次调用方法时,响应需要很长时间(4-5s),并且每次下一次响应都是立即响应。
编辑:好的,第二个可能的解决方案是使用this article中描述的getDocument()。一句警告,在我们的测试中,我们已经看到这在Mac上的Firefox上并不总是可靠的。这种方法的实质是:
getAppletContext().showDocument(new URL("javascript:uploadComplete()"));