0

IEでのみJavaアプレットからJavaスクリプト関数を呼び出すと、アクセス拒否の例外が発生します。(更新された情報で元の質問を変更しました。)

これが私のHTMLコードです

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

ju別のJavaScriptファイルからdoneUploadを呼び出す同じページでグローバルに宣言されます。アプレットタグに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は呼び出されません。私はここで何が間違っているのですか?

4

1 に答える 1

1

これは役に立ちますか?

Sun フォーラムでのその回答の要約:

こんにちは、私は同じ問題を抱えていました。私はそれを解決しました。次のようなアプレットメソッドを実装するだけです:

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

このアプローチの唯一の問題は、メソッドを初めて呼び出すとき、応答にかなり長い時間がかかり (4 ~ 5 秒)、次回はすぐに応答することです。

編集:OK、2番目の潜在的な解決策は、この記事で説明されているように getDocument() を使用することです。1 つの警告として、私たちのテストでは、これが Mac 上の Firefox で常に信頼できるとは限らないことがわかりました。このメソッドの本質は、次のことを行うことです。

getAppletContext().showDocument(new URL("javascript:uploadComplete()"));
于 2009-12-09T20:47:08.983 に答える