- PR -

JavaAppletにてJavaScriptでWindowを閉じる際のjava.policyの設定について

1
投稿者投稿内容
にこ坊
会議室デビュー日: 2002/03/15
投稿数: 6
お住まい・勤務地: 岡山県
投稿日時: 2004-05-12 11:40
JavaAppletにて自Windowを閉じたいのですが、
その際、下記のロジックでJavaScriptのself.close()を使用しようとしています。
try {
JSObject brawserWindow =null;
brawserWindow = JSObject.getWindow(this);
brawserWindow.eval("self.close()");
} catch (JSException jse) {
jse.printStackTrace();
// } catch (java.security.AccessControlException acEx) {
// java.security.Permission pm = acEx.getPermission();
// System.out.println(pm.getName());
}

しかし、これを実行した際、以下のようなExceptionが発生してしまいます。
Exception occurred during event dispatching:
java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.plugin.javascript)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:272)
at java.security.AccessController.checkPermission(AccessController.java:399)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:545)
at java.lang.SecurityManager.checkPackageAccess(SecurityManager.java:1501)
at sun.applet.AppletSecurity.checkPackageAccess(AppletSecurity.java:169)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:283)
at java.lang.ClassLoader.loadClass(ClassLoader.java:253)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313)
at netscape.javascript.JSObject.getWindow(JSObject.java:134)
          以下省略

セキュリティの問題と思い以下のようにjava.policyを設定しています。
grant codeBase "file:/D:/test/test.jar" {
permission java.security.AllPermission;
permission java.lang.RuntimePermission "accessClassInPackage.sun.plugin.javascript";
};

1行目の設定はユーザ指定のファイルへの読書き用で問題なく動作しています。
2行目の設定が動作していないようなのですが、何か書き方がおかしいでしょうか?
policytool.exeを使用して記述したのですが、署名がないから動かないのでしょうか?

以上、よろしくお願いいたします。
なりん
会議室デビュー日: 2004/04/27
投稿数: 6
お住まい・勤務地: 神奈川
投稿日時: 2004-05-18 14:06
win = JSObject.getWindow(this);

win.call("close", null);

これじゃだめですか?
にこ坊
会議室デビュー日: 2002/03/15
投稿数: 6
お住まい・勤務地: 岡山県
投稿日時: 2004-05-18 14:45
ダメですねぇ。
以下Exceptionが発生いたします。

Exception occurred during event dispatching:
java.security.AccessControlException: access denied (java.lang.RuntimePermission
accessClassInPackage.sun.plugin.javascript)
at java.security.AccessControlContext.checkPermission(AccessControlConte
xt.java:272)
at java.security.AccessController.checkPermission(AccessController.java:
399)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:545)
at java.lang.SecurityManager.checkPackageAccess(SecurityManager.java:150
1)
at sun.applet.AppletSecurity.checkPackageAccess(AppletSecurity.java:169)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:283)
at java.lang.ClassLoader.loadClass(ClassLoader.java:253)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313)
at netscape.javascript.JSObject.getWindow(JSObject.java:134)
なりん
会議室デビュー日: 2004/04/27
投稿数: 6
お住まい・勤務地: 神奈川
投稿日時: 2004-05-18 14:54
アプレットのどの辺りで JSObject.getWindow(this);
を実行していますか?

こちらでは、java.policyの設定をした記憶はありません。


にこ坊
会議室デビュー日: 2002/03/15
投稿数: 6
お住まい・勤務地: 岡山県
投稿日時: 2004-05-18 15:20
お世話になります。

JButton押下時のイベント内で記述しています。

追記忘れたのですが、
当方でもエクスプローラ(Windows使用なので)からアプレットを埋め込んでいるHTMLを
直接動かした場合には、最初のコード、指摘されたコードとも「閉じる」動作が行われています。

これをTomcatなりの実行環境に置いて実行するとjava.security.AccessControlExceptionが発生するのです。

ので、ソース自体というよりも、セキュリティの設定にかかっているのではないかと考えているのですが、いかがでしょうか?


なりん
会議室デビュー日: 2004/04/27
投稿数: 6
お住まい・勤務地: 神奈川
投稿日時: 2004-05-18 15:46
Tomcat4 とか JRunで以下のようなプログラムは動作しています。
このとき、特にセキュリティの設定はしていませんでしたが...
難しいです。


import netscape.javascript.JSObject;
import java.applet.Applet;

public class TestApplet extends Applet {
private MyThread myThread = null;

public void init() {
JSObject win = null;
win = JSObject.getWindow(this);
myThread = new MyThread(win);
myThread.start();
}
}

class MyThread extends Thread {
private JSObject win = null;

public MyThread(JSObject win_){
win = win_;
}
public synchronized void run() {
     ・
     (省略)
     ・
win.call("close", null);
}
}


[ メッセージ編集済み 編集者: なりん 編集日時 2004-05-18 15:49 ]
なりん
会議室デビュー日: 2004/04/27
投稿数: 6
お住まい・勤務地: 神奈川
投稿日時: 2004-05-18 16:05
HTML中のOBJECTタグに以下は記述していますか?

IEの場合
<PARAM NAME="mayscript" VALUE="true">

NNの場合
mayscript="true"

http://java.sun.com/j2se/1.4/ja/docs/ja/guide/plugin/developer_guide/java_js.html
1

スキルアップ/キャリアアップ(JOB@IT)