ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

MacのSafariでJava Appletを動作させるためには、MANIFEST.MFを正しく記述する

以前書いた記事の内容を検証した結果、違う結果となりました。

f:id:AJYA:20150129054253j:plain
photo credit: Michael Heilemann via photopin cc

Java AppletMacSafariで動作しないために調べている途中に、以下の記事を書きました。

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コンソールに例外は表示されなくなりましたが、以下の内容の新しい警告メッセージが表示されるようになりました。
f:id:AJYA:20151229052720p:plain

詳細情報は下の画像のとおりで、JavaアプレットJavaScriptを連携させて機能を実現しているために警告が表示されているようです。
f:id:AJYA:20150129125418p:plain

情報を探すと、MANIFEST.MFにCaller-Allowable-Codebase属性を記述すれば警告されなくなるようです。

Java applet manifest - Allow all Caller-Allowable-Codebase - Stack Overflow

セキュリティー用の JAR ファイルマニフェストの属性

MANIFEST.MFの記述を、

Manifest-Version: 1.0
Codebase: example.jp
Permissions: all-permissions
Trusted-Library: true
Caller-Allowable-Codebase: example.jp

に変更しました。

やっと動作するように

さらに記述を追加したMANIFEST.MFで、やっとMacSafariでもJava Appletが警告もなく動作するようになりました。
こういった情報は、日本語では見かけたことがありません。
Javaで日常的に開発されている方は、こういったことは常識なのかな。