以前書いた記事の内容を検証した結果、違う結果となりました。
photo credit: Michael Heilemann via photopin cc
Java AppletがMacのSafariで動作しないために調べている途中に、以下の記事を書きました。
MacのSafariでJava Appletを動作させるためには、WebサイトはHTTPSのサイトでなければならない? - ソフトウェア開発者の日常
この時点ではまだ検証が完了していなかったので、この続きになります。
HTTPSでも動作しない
以前の記事の最後に書いたように、HTTPSにすれば動作する可能性があったので、SSLの証明書を正式に取得して検証しました。結果は、予想とは異なり動作は変わりませんでした。
MANIFEST.MFへの記述の追加が必要
Javaのコンソールになにか表示されないか確認すると、以下の例外が表示されていました。liveconnect: Security Exception: LiveConnect (JavaScript) blocked due to security settings.
検索すると、MANIFEST.MFに記述を追加すれば、動作するようです。
applet - Java 7u51: LiveConnect (JavaScript) blocked due to security settings - Stack Overflow
MANIFEST.MFの記述を、
Manifest-Version: 1.0 Permissions: all-permissions
から、
Manifest-Version: 1.0 Codebase: example.jp Permissions: all-permissions Trusted-Library: true
に変更しました。
さらにMANIFEST.MFへの記述の追加が必要
上記のMANIFEST.MFで動作を確認したところ、Javaコンソールに例外は表示されなくなりましたが、以下の内容の新しい警告メッセージが表示されるようになりました。詳細情報は下の画像のとおりで、JavaアプレットとJavaScriptを連携させて機能を実現しているために警告が表示されているようです。
情報を探すと、MANIFEST.MFにCaller-Allowable-Codebase属性を記述すれば警告されなくなるようです。
Java applet manifest - Allow all Caller-Allowable-Codebase - Stack Overflow
MANIFEST.MFの記述を、
Manifest-Version: 1.0 Codebase: example.jp Permissions: all-permissions Trusted-Library: true Caller-Allowable-Codebase: example.jp
に変更しました。
やっと動作するように
さらに記述を追加したMANIFEST.MFで、やっとMacのSafariでもJava Appletが警告もなく動作するようになりました。こういった情報は、日本語では見かけたことがありません。
Javaで日常的に開発されている方は、こういったことは常識なのかな。