- - PR -
JavaAppletにてJavaScriptでWindowを閉じる際のjava.policyの設定について
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 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-05-18 14:06
win = JSObject.getWindow(this);
win.call("close", null); これじゃだめですか? |
|
投稿日時: 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-05-18 14:54
アプレットのどの辺りで JSObject.getWindow(this);
を実行していますか? こちらでは、java.policyの設定をした記憶はありません。 |
|
投稿日時: 2004-05-18 15:20
お世話になります。
JButton押下時のイベント内で記述しています。 追記忘れたのですが、 当方でもエクスプローラ(Windows使用なので)からアプレットを埋め込んでいるHTMLを 直接動かした場合には、最初のコード、指摘されたコードとも「閉じる」動作が行われています。 これをTomcatなりの実行環境に置いて実行するとjava.security.AccessControlExceptionが発生するのです。 ので、ソース自体というよりも、セキュリティの設定にかかっているのではないかと考えているのですが、いかがでしょうか? |
|
投稿日時: 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-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
