JDK 8u451では、JavaFXはJava SE 8の一部として含まれなくなりました。 詳細は、https://www.oracle.com/javase/javafxを参照してください。
このトピックでは、配備ツールキットdtjava.jsを使用して、ブラウザでJavaおよびJavaFXアプリケーションをデプロイする方法について説明します。 APIの概要、コールバック・メソッドに関する情報、および典型的な使用例を提供します。
配備ツールキット・ライブラリを使用して、JavaまたはJavaFXアプリケーションをWebページに埋め込んだり、ブラウザから起動したりします。 アプリケーションのWebデプロイメントを簡略化し、アプリケーションの起動時のエンド・ユーザー操作を改善するために、配備ツールキットはJavaScript APIを提供します。
JavaまたはJavaFXアプリケーションをWebページに挿入するために必要なHTMLタグを追加する機能を提供するだけでなく、配備ツールキットは次のアクションも提供します。
ユーザーの環境がサポートされているかどうかを検出する。
JREのインストールを提案する(必要な場合)。
アプリケーションのロード中、ユーザーに視覚的なフィードバックを提供する。
予期しないエラーをユーザーにレポートする。
デプロイメントおよびWebページとの統合を簡略化するために使用できる他のヘルパーAPIを開発者に提供する。
配備ツールキットを使用するには、https://java.com/js/dtjava.jsにある共有の場所から配備ツールキットJavaScriptファイルをインポートします。
この方法では、アプリケーションは常に、最新で推奨の方法を使用してWebページに統合します。 共有の場所を使用できない場合、<fx:deploy> AntタスクのincludeDTオプションを使用することによって、必要なファイルをアプリケーションに含めることができます。
単純な使用事例の大部分では、デプロイメントに必要なコードは、Javaパッケージ化ツールによって生成されます(5.3.1項「Javaパッケージ化ツール」を参照)。コールバックを使用して、デフォルトの動作をさらに調整できます。 さらに柔軟性が必要な場合、配備ツールキットAPIを直接使用できます。
この節の内容は以下のとおりです。
配備ツールキットAPIは、次の重要なメソッドを提供します。
dtjava.embed(app, platform, callbacks)
指定されたアプリケーション記述子に基づいて、アプリケーションをブラウザに埋め込みます。 JREのインストールが必要な場合、配備ツールキットは、デフォルトでユーザーにJREをインストールするよう要求するか、インストーラをダウンロードできるページにリダイレクトします。
dtjava.launch(app, platform, callbacks)
指定されたアプリケーション記述子に基づいて、ブラウザの外部にデプロイされるアプリケーションを起動します。 JREのインストールが必要な場合、配備ツールキットは、デフォルトで次のアクションを実行します。
JREインストーラの起動を試行する。
ランタイムの自動化されたインストールが不可能な場合、ユーザーが手動でインストールするためのポップアップ要求が表示されます。
dtjava.install(platform, callbacks)
プラットフォーム要件に応じて、必要なコンポーネントのインストールを開始します。
dtjava.validate(platform)
ユーザーの環境がプラットフォーム要件を満たしていることを検証します(たとえば、必要なバージョンのJREが使用可能であることを確認するなど)。 問題を記述したPlatformMismatchEventを返します(存在する場合)。
dtjava.hideSplash(id)
指定されたIDのアプリケーションのHTMLスプラッシュ画面を非表示にします。 スプラッシュ画面が存在しない場合、このメソッドは影響がありません。 JavaFXアプリケーションの場合、アプリケーションの準備ができると、このメソッドは自動的に呼び出されます。
これらのメソッドに必要な引数の詳細は、次の各項を参照してください。
アプリケーション起動記述子は、dtjava.Appオブジェクトのインスタンスです。 起動記述子には、起動に必要なものを記述したすべての詳細が含まれています。 dtjava.Appコンストラクタは、次のパラメータを受け取ります。
dtjava.App(url, {attribute_map});
最初のパラメータは、必須のurl属性で、JNLPファイルへのURLまたは相対リンクが含まれています。 2番目のパラメータは、次のリストで説明する属性のサブセットです。
id
アプリケーションの識別子。 識別子はWebページ上で一意である必要があります。 識別子がnullの場合、識別子は自動生成されます。 後で、識別子を使用して、JavaScriptコード内のアプリケーションのハンドルを取得できます。
jnlp_content
(オプション) BASE64エンコーディングでのJNLPファイルのコンテンツ。
params
アプリケーションに渡す名前付きパラメータのセット(存在する場合)。 この属性の形式は次のとおりです。
params: { variable: 'value' }
widthおよびheight
埋込みアプリケーション用の領域の予約に使用されるディメンション。 値は、絶対的(ピクセル)に指定することも、相対的に指定することもできます(たとえば、50、50%)。
placeholder
アプリケーションの埋込み先のDOMノードへの参照またはDOMノードの識別子。
toolkit
使用されるUIツールキットを識別します。 JavaFXアプリケーションにはfx、Swingアプリケーションにはswingを使用します。 値が指定されない場合、パラメータはfxにデフォルト設定されます。
|
ノート: width、heightおよびplaceholder属性は、ブラウザで実行するアプリケーション(つまりdtjava.embed()メソッドを使用するアプリケーション)には必要ですが、他のデプロイメントのタイプ(dtjava.launch()メソッドを使用するアプリケーションなど)には必要ありません。 |
例19-1は、ブラウザで実行するアプリケーションのアプリケーション起動記述子コードの例を示しています。
アプリケーションの起動のためのプラットフォーム要件は、dtjava.Platformオブジェクトによって定義されます。 次のattributeがサポートされています。
javafx
JavaFXの最小バージョンが必要です。 デフォルトはnullです。
jvm
JREの最小バージョンが必要です。 デフォルトは1.6+です。
jvmargs
要求されたJVM引数のリスト。 デフォルトはnullです。
バージョン文字列は、次のルールに従って処理されます。
nullのバージョン文字列は、インストールするための要件がないように扱われます。 検証では、このコンポーネントをインストールするかどうかを渡します。
バージョンのパターン文字列の形式は#[.#[.#[_#]]][+|*]で、"1.7"、"2.2*"および"1.7.0_25+"などの文字列を含みます。
アスタリスク(*)は、このファミリ内の任意のバージョンを意味します。ファミリは接頭辞で定義されます。
プラス記号(+)は、指定されたバージョン以上の任意のバージョンを意味します。
バージョンのパターンに4つのすべてのバージョン・コンポーネントは含まれていないが、アスタリスクまたはプラス記号で終わっていない場合、これはアスタリスクで終わっているのと同じように扱われます。
違いを明確にするために、次の例を考えてみます。
"1.6.0*"は、1.6.0_25には一致しますが、1.7.0_01には一致しません、一方、"1.6.0+"または"1.*"はどちらにも一致します。
"2.1"は"2.1*"と同等で、"2.1"で始まるどのバージョン番号にも一致します。
アスタリスクとプラス記号の両方のパターンは、コンポーネントのどのインストール済バージョンにも一致します。 ただし、コンポーネントがインストールされていない場合、検証は失敗します。
例19-2は、dtjava.Platformオブジェクトを示しています。
例19-2 dtjava.Platformオブジェクトの例
var platform = new dtjava.Platform({
javafx: "2.2+",
jvmargs: "-Dapp.property= ? -Xmx1024m"
});
プラットフォーム要件を満たさない場合、validate()メソッドからの戻り値として、またはonDeployErrorコールバックに渡されて、dtjava.PlatformMismatchEventが返されます。 このオブジェクトは、次のヘルパー・メソッドを指定して、根本原因を特定します。
javafxStatus()
JavaFXランタイムがないことが原因でエラーにならなかった場合、okを返します。 それ以外の場合、このメソッドは、問題を特徴づける次のいずれかのエラー・コードを返します。
none
JavaFXランタイムがシステムにないことが検出されました。
old
JavaFXランタイムのバージョンが検出されましたが、プラットフォーム要件に一致しません。
disabled
JavaFXランタイムの一致するバージョンが検出されましたが、無効になっています。
unsupported
JavaFXは、このプラットフォームではサポートされていません。
jreStatus()
JREがないことが原因でエラーにならなかった場合、okを返します。 それ以外の場合、このメソッドは、問題を特徴づける次のいずれかのエラー・コードを返します。
none
JREがシステムにないことが検出されました。
old
JREのバージョンが検出されましたが、プラットフォーム要件に一致しません。
oldplugin
一致するJREが見つかりましたが、非推奨のJava Plug-inを使用するよう構成されています。
canAutoInstall()
欠落したコンポーネントのインストールを自動的にトリガーできる場合、または欠落したコンポーネントがない場合は、trueを返します。
isRelaunchNeeded()
アプリケーションをロードする前にブラウザを再起動する必要がある場合、trueを返します。 これは、インストールを実行する必要があるときにtrueになることがよくあります。
isUnsupportedBrowser()
現在のブラウザがサポートされていない(たとえばブラウザが古い)場合、trueを返します。
isUnsupportedPlatform()
このプラットフォームが、サポートされているプラットフォーム要件を満たさない場合、trueを返します。 たとえば、JavaFXアプリケーションは、サポートされていないSolarisで起動しようとします。
javafxInstallerURL (locale)
JREの必須バージョンを手動でダウンロードおよびインストールするページのURLを返します。 一致するJREがすでにインストールされているかサポートされていない場合、戻り値はnullです。
jreInstallerURL (locale)
Javaの必須バージョンをインストールするためにアクセスするページのURLを返します。 一致するJREがすでにインストールされているかサポートされていない場合、戻り値はnullです。
配備ツールキットでは、起動動作のカスタマイズに使用できる一連のフックが提供されます。 このフックを使用するには、開発者はコールバック関数を指定する必要があります。 次のフックがサポートされています。
onDeployError: function(app, mismatchEvent)
プラットフォーム要件が満たされていないときに呼び出されます。
onInstallFinished: function(placeholder, component, status, relaunchNeeded)
インストールを手動で開始した場合を除き、必須コンポーネントのインストールの完了後に呼び出されます。
onInstallNeeded: function(app, platform, cb, isAutoinstall, needRelaunch, launchFunc)
アプリケーションの埋込みや起動で追加のコンポーネントをインストールする必要がある場合に呼び出されます。
onInstallStarted - function(placeholder, component, isAuto, restartNeeded)
必須コンポーネントのインストールをトリガーする前に呼び出されます。
次のフックは、埋込みアプリケーションに固有のものです。
onGetNoPluginMessage function(app)
Java Plug-inがインストールされておらず、どのコールバックも役に立っていない場合、アプリケーション領域で表示されるコンテンツを取得するために呼び出されます。
onGetSplash: function(app)
埋込みアプリケーションの場合、スプラッシュ画面のコンテンツを取得するために呼び出されます。
onJavascriptReady: function(id)
アプリケーションがJavaScript呼出しを受け入れる準備が整った後で呼び出されます。
onRuntimeError: function(id)
アプリケーションが起動に失敗した場合に呼び出されます。
このハンドラを利用して、エラー処理動作(ユーザーの言語でメッセージを表示するなど)をカスタマイズできます。 onDeployErrorハンドラの例は、19.3.8項「サポートされていないプラットフォームのハンドラの作成」の例を参照してください。
現在のプラットフォームが指定されたプラットフォーム要件に一致しないため、アプリケーションをデプロイできない場合に、コールバック関数が呼び出されます。 また、プラットフォームに互換性がないため、欠落したコンポーネントをインストールする要求を完了できない場合にも呼び出されます。
関数シグネチャ:
onDeployError : function(app, mismatchEvent)
問題には、致命的なエラーと、一時的な問題(再起動が必要など)があります。 詳細は、提供されるmismatchEventから抽出できます。 次に、一般的ないくつかの組合せを示します。
Javaではブラウザがサポートされていません。
mismatchEvent.isUnsupportedBrowser()はtrueを返します
アプリケーションを起動する前にブラウザを再起動する必要があります。
mismatchEvent.isRelaunchNeeded()はtrueを返します
JRE固有のコード:
JREは、このプラットフォームではサポートされていません。
mismatchEvent.jreStatus() == "unsupported"
JREが検出されなかったため、インストールする必要があります。
mismatchEvent.jreStatus() == "none"
JREのインストールされているバージョンは、アプリケーション要件に一致しません。
mimatchEvent.jreStatus() == "old"
一致するJREが検出されましたが、非推奨のJava Plug-inが使用されています。
mimatchEvent.jreStatus() == "oldplugin"
JavaFX固有のコード:
JavaFXは、このプラットフォームではサポートされていません。
mismatchEvent.javafxStatus() == "unsupported"
JavaFXランタイムがないため、手動でインストールする必要があります。
mismatchEvent.javafxStatus() == "none"
JavaFXランタイムのインストールされているバージョンは、アプリケーション要件に一致しません。
mismatchEvent.javafxStatus() == "old"
JavaFXランタイムはインストールされていますが、無効になっています。
mismatchEvent.javafxStatus() == "disabled"
デフォルトのエラー・ハンドラは、アプリケーション起動エラーと埋込みコンテンツの両方を処理します。
Java Plug-inがインストールされておらず、どのコールバックもこの状況の解決に役に立っていない場合、アプリケーション領域で表示されるコンテンツを取得するために、このハンドラが呼び出されます。
関数シグネチャ:
onGetNoPluginMessag : function(app)
アプリケーションがブラウザに埋め込まれると、このハンドラは、スプラッシュ画面のコンテンツを取得します。
関数シグネチャ:
onGetSplash: function(app)
アプリケーション起動記述子を入力として取得します。 nullが返される場合、スプラッシュ画面は無効になります。 null以外の戻り値は、スプラッシュ・オーバーレイに追加されるHTMLコードである必要があります。 スプラッシュ・オーバーレイは、特定のサイズを強制するものではありません。 アプリケーションを実行する領域に適合するようにカスタム・スプラッシュ・イメージがサイズ指定されていることを確認する必要があります。
スプラッシュ画面のカスタマイズの例は、19.3.7項「カスタムHTMLスプラッシュ画面の追加」および19.3.6項「HTMLスプラッシュ画面の無効化」を参照してください。
|
ノート: スプラッシュ画面の自動的な非表示は、JavaFXアプリケーションでのみサポートされています。 Swingアプレットをデプロイする場合、アプリケーションは、dtjava.hideSplash()を明示的に呼び出して、スプラッシュ画面を非表示にする必要があります。 Swingのデプロイメントに関するページの例6-6を参照してください。 |
このハンドラは、必須コンポーネントのインストールの完了後に呼び出されます。 インストールが手動モードで実行されている場合、このメソッドは呼び出されません。
関数シグネチャ:
onInstallFinished: function(placeholder, component, status, relaunchNeeded)
パラメータ:
placeholder: 視覚的なフィードバックを挿入するためにonInstallStartedに渡されたDOM要素。
component: 文字列"jre"または"javafx"。
status: "success"、"error:generic"、"error:download"または"error:canceled"など、インストールのステータスを分類する文字列。
relaunchNeeded: インストールの完了にブラウザの再起動が必要な場合に指定するブール値。
このハンドラは、アプリケーションの埋込みや起動で追加のコンポーネントをインストールする必要がある場合に呼び出されます。 このコールバックは、何かをインストールする必要があることをユーザーに報告したり、install()を使用してインストールを開始したり、埋込みアプリケーションのためにスプラッシュ画面を非表示にしたり(必要な場合)するなどの状況を処理する役割を果たします。 インストールが完了した後で、コールバック実装は、指定された起動関数を使用して、アプリケーションの起動を再試行できます。
プラットフォーム要件を満たしていない場合(たとえば、プラットフォームがサポートされていない場合、またはインストールが不可能である場合など)、このメソッドは呼び出されません。
デフォルトのハンドラでは、ブラウザに埋め込まれたアプリケーションに対して、クリックしてインストールの解決策を提供し、launch()を使用して起動されたアプリケーションに対して、追加の質問を行わずにインストールを実行しようとします。
ハンドラがnullの場合、無操作のハンドラとして扱われます。
関数シグネチャ:
onInstallNeeded: function(app, platform, cb, isAutoinstall, needRelaunch, launchFunc)
パラメータ:
app: アプリケーション起動記述子。 埋込みアプリケーションの場合、app.placeholderは、視覚的なフィードバックに使用されるDOMツリー内の埋込みアプリケーション領域のルートを参照します。
platform: アプリケーションのプラットフォーム要件。
cb: インストール・プロセス中に使用されるコールバックのセット。
isAutoinstall: インストールを自動的に起動できる場合はTrueです。
needRestart: インストールの完了後にブラウザの再起動が必要な場合はTrueです。
launchFunction: インストールの終了後にアプリケーションの起動を再試行するために実行する関数。
このハンドラは、必須コンポーネントのインストールをトリガーする前に呼び出されます。 手動インストールのシナリオでは、これはインストール・ページが開く前に呼び出されます。
このフックは、インストール中にユーザーに視覚的なフィードバックを提供するために使用できます。 プレースホルダは、外観のために使用できる領域を指します。 埋込みアプリケーションの場合、これは、アプリケーションが埋め込まれる領域です。 nullの場合、呼び出されるオブジェクトは、単独で表示する場所を見つける必要があります。
インストールの自動的な起動の場合、onInstallFinishedは、インストールが完了した(成功または失敗)後に呼び出されます。
ハンドラがnullの場合、無操作のハンドラとして扱われます。
関数シグネチャ:
onInstallStarted: function(placeholder, component, isAuto, restartNeeded)
パラメータ:
placeholder: 視覚的なフィードバックを挿入するためのDOM要素。 nullの場合、呼び出されるオブジェクトは、たとえばアプリケーションをWebページに埋め込むなど、単独で視覚的なフィードバックをドキュメントに追加する必要があります。
component: 文字列"Java"、"JavaFX"または"Java bundle"。
isAutoInstall: インストーラが自動的に起動される場合はTrueです。
restartNeeded: ブラウザの再起動が必要な場合に指定するブール値。
このハンドラは、埋込みアプリケーションがJavaScript呼出しを受け入れる準備が整った後で呼び出されます。
関数シグネチャ:
onJavascriptReady: function(id)
このハンドラは、埋込みアプリケーションが起動に失敗した場合に呼び出されます。
関数シグネチャ:
onRuntimeError: function(id)
この項では、配備ツールキットを使用するデプロイメントの例を示します。
|
ノート: 一部の配備ツールキット・メソッドは、Webページの本文がロードされる前に使用される場合、配備ツールキット・プラグインをインスタンス化できないため、完全には機能しない可能性があります。 WebページのDOMツリーが構築される前に配備ツールキットを使用する場合、ページの<body>要素内でdtjava.jsをロードし、他の配備ツールキットAPIより前に呼び出す必要があります。 |
デプロイメントを開始するには、HTMLコンテンツがロードされた後で、onloadハンドラを使用してアプリケーションを追加します。その理由は次のとおりです。
アプリケーション・コンテンツが挿入されるとき、DOMツリーが存在する必要があります。 HTMLコンテンツ・ページのロード後に、DOMツリーが作成されます。
配備ツールキットの検出コードが、HTMLページをロードしないようにすることはありません。
配備ツールキットは、ページに必要な他のリソースと同時にロードしないようにします。
例19-3は、Webページに埋め込まれたアプリケーションのデフォルトのデプロイメント・シナリオを示しています。 アプリケーションは、deployIt()関数でWebページに追加されます。 この関数は、ページがロードされ、そのDOMツリーが構築された後で呼び出されます。 アプリケーションのDOMツリーでの位置は、プレースホルダ・パラメータの値によって決定されます。 この場合、アプリケーションは、id="place"の<div>タグに挿入されます。
メイン・ページのロード後にアプリケーションをWebページに追加すると、埋込みアプリケーションを含む完全なWebページを取得し、高速にロードするのに役立ちます。これは、アプリケーションは、Webページに必要な他のリソースのロードと同時に起動するためです。
プレースホルダ要素の値には、コンテナDOMノードを指す文字列またはJavaScript変数を指定できます。 そのノードがドキュメントDOMツリーから分離されている場合、親ノードがDOMツリーに追加されるまで、アプリケーションは初期化されません。
例19-3 プレースホルダを使用したHTML本文へのアプリケーションの挿入
<head>
<script type="text/javascript" src="https://java.com/js/dtjava.js"></script>
<script>
function deployIt() {
dtjava.embed(
{ id: "myApp",
url: "Fish.jnlp",
width: 300,
height: 200,
placeholder: "place"
},
{ javafx: "2.2+" },
{}
);
}
dtjava.addOnloadCallback(deployIt);
</script>
</head>
<body>
<div id="place"></div>
</body>
Java Web Startアプリケーションを起動するためのリンクの正規形式を、例19-4に示します。 相対リンクまたは絶対リンクのいずれかを指定できます。
例19-4 Web Startアプリケーションを起動するための正規リンク
<a href="my.jnlp"
onclick="dtjava.launch(new dtjava.App('my.jnlp'));
return false;">Launch me!</a>
簡略化された代替の構文を、例19-5に示します。
例19-5 Web Startアプリケーションを起動するためのリンク(簡略化)
<a href="my.jnlp"
onclick="dtjava.launch({url: 'my.jnlp'});
return false;">Launch me!</a>
単純なアプリケーション用の3番目の形式を、次の例に示します。
例19-6 Web Startアプリケーションを起動するためのリンク(3番目の例)
<a href="my.jnlp"
onclick="dtjava.launch('my.jnlp');
return false;">Launch me!</a>
JavaScriptがブラウザで無効な場合、配備ツールキットは機能しません。 この場合、ブラウザはhref属性を使用しようとします。 JREがインストールされている場合、アプリケーションが起動します。 return false;文により、起動が成功した場合に、ブラウザが現在のページから確実に離れないようになります。
Webページからアプリケーションに動的パラメータを渡すことができます。 これを行うには、名前付きパラメータのセットを、アプリケーション記述子のparams属性として追加する必要があります。
例19-7では、埋込みアプリケーションがWebページから2つの動的パラメータを取得します。 JavaScript変数の値を使用して"zip"パラメータが割り当てられていることに注意してください。
例19-7 埋込みアプリケーションへのパラメータの受渡し
<head>
<script type="text/javascript" src="https://java.com/js/dtjava.js"></script>
<script>
function deployIt() {
var zipcode = 95054;
dtjava.embed(
{ id: "myApp",
url: "Map.jnlp",
width: 300,
height: 200,
placeholder: "place",
params: {
mode: "streetview",
zip: zipcode
}
},
{ javafx: "2.2+" },
{}
);
}
dtjava.addOnloadCallback(deployIt);
</script>
</head>
<body>
<div id="place"></div>
</body>
ユーザーがJRE 7u6以降を所有している場合、Java Web Startアプリケーションの場合と同じアプローチが有効です。 次はその例です。
例19-8 Web Startアプリケーションへのパラメータの受渡し
<script>
var zipcode = 95054;
function launchApp() {
dtjava.launch(
{ url: 'my.jnlp',
params: {
mode: "streetview",
zip: zipcode
}
},
{ javafx : '2.2+' },
{}
);
return false;
}
</script>
<a href="my.jnlp" onclick="launchApp(); return false;">
Launch me!
</a>
アプリケーション・コードのパラメータにアクセスするには、アプリケーション・クラスのgetParameters()メソッドを使用します。たとえば:
String zipcode = app.getParameters().getNamed("zip");
dtjava.embed()関数の2番目の引数グループを使用して、アプリケーションのプラットフォーム要件を指定します。
例19-9では、JRE 1.7以降はjvmパラメータで指定され、JavaFX 2.2以降はjavafxパラメータで指定され、jvmargsパラメータは、1GBのヒープ・サイズで所定のオプションを指定したJava Virtual Machine (JVM)でアプリケーションを実行する必要があることを示します。
例19-9 プラットフォーム要件の指定およびJVMプロパティの受渡し
<head>
<script type="text/javascript" src="https://java.com/js/dtjava.js"></script>
<script>
function deployIt() {
dtjava.embed(
{ id: "my",
url: "app.jnlp",
width: 300,
height: 200,
placeholder: "place"
},
{
jvm: "1.7.0+",
javafx: "2.2+",
jvmargs: "-Dapp.property=somevalue -Xmx1024m"
}
);
}
dtjava.addOnloadCallback(deployIt);
</script>
</head>
<body>
<div id="place"></div>
</body>
JavaScriptからJavaまたはJavaFXアプリケーションにアクセスするには、アプリケーションを表すJavaScriptオブジェクトへの参照を取得する必要があります。 例19-3に示すように、dtjava.embed()関数の最初の引数グループのidパラメータを指定します。
たとえば、idパラメータをmyに設定した場合、例19-10に示すスクリプトを使用して、アプリケーションのパブリック・メソッドにアクセスできます。
例19-10 idパラメータを使用したアプリケーション・メソッドへのアクセス
<script>
var a = document.getElementById("my");
a.java_method();
</script>
アプリケーションが初期化フェーズを終了するまで、アプリケーション・メソッドを呼び出そうとしても動作しません。 起動フェーズの詳細は、第4.2項、「"アプリケーションの起動プロセス、エクスペリエンスおよびカスタマイズ。"項」を参照してください ロード中のアプリケーションにアクセスするには、「例19-11」に示すように、onJavascriptReadyコールバックを使用します。
例19-11 アプリケーションのロード中のアプリケーション・メソッドへのアクセス
<head>
<script type="text/javascript" src="https://java.com/js/dtjava.js"></script>
<script>
function callApp(id) {
//it is safe to call now
var a = document.getElementById(id);
a.java_method();
}
function deployIt() {
dtjava.embed(
{ id: "my",
url: "fxapp.jnlp",
width: 300,
height: 200,
placeholder: "place"
},
{},
{
onJavascriptReady: callApp
}
);
}
dtjava.addOnloadCallback(deployIt);
</script>
</head>
<body>
<div id="place"></div>
</body>
JavaFXアプリケーションのHTMLスプラッシュ画面を無効にするには、例19-12に示すように、nullを返すonGetSplashハンドラを追加します。 アプリケーションの起動フェーズの詳細は、4.2項「アプリケーションの起動プロセス、操作およびカスタマイズ」を参照してください。
例19-12 HTMLスプラッシュ画面の無効化
<head>
<script type="text/javascript" src="https://java.com/js/dtjava.js"></script>
<script>
function deployIt() {
dtjava.embed(
{ id: "my",
url: "app.jnlp",
width: 300,
height: 200,
placeholder: "place"
},
{
jvm: "1.7.0+",
javafx: "2.2+",
},
{
onGetSplash: function(app) {return null;}
}
);
}
dtjava.addOnloadCallback(deployIt);
</script>
</head>
<body>
<div id="place"></div>
</body>
Swingアプレットをデプロイする場合、アプリケーションは、dtjava.hideSplash()を明示的に呼び出して、スプラッシュ画面を非表示にする必要があります。
例19-13は、JavaScript関数で定義して、デフォルトのHTMLスプラッシュ画面を緑色の長方形に置き換える方法を示しています。
例19-13 スプラッシュ画面のカスタム画面への置換
<head>
<script type="text/javascript" src="https://java.com/js/dtjava.js"></script>
<script>
function getSplash(app) {
//custom splash - green rectangle
var p = document.createElement('div');
p.style.width = app.width;
p.style.height = app.height;
p.style.background="green";
return p;
}
function deployIt() {
dtjava.embed(
{ id: "my",
url: "app.jnlp",
width: 300,
height: 200,
placeholder: "place"
},
{
jvm: "1.7.0+",
javafx: "2.2+",
},
{
onGetSplash: getSplash
}
);
}
dtjava.addOnloadCallback(deployIt);
</script>
</head>
<body>
<div id="place"></div>
</body>
例19-14は、サポートされていないブラウザを処理するためのJavaScriptの使用を示しています。
例19-14 JavaScriptを使用したサポートされていないブラウザの処理
<head>
<script type="text/javascript" src="https://java.com/js/dtjava.js"></script>
<script>
function reportError(app, r) {
//ovewrite behavior for unsupported browser
var a = app.placeholder;
if (a != null && r.isUnsupportedBrowser()) {
var p = document.createElement('div');
p.id = "splash";
p.style.width = app.width;
p.style.height = app.height;
p.style.background="red";
p.appendChild(
document.createTextNode("This browser is not supported."));
//clear embedded application placeholder
while(a.hasChildNodes()) a.removeChild(a.firstChild);
//show custom message
a.appendChild(p);
} else {
//use default handlers otherwise
var def = new dtjava.Callbacks();
return def.onDeployError(app, r);
}
}
function deployIt() {
dtjava.embed(
{ id: "my",
url: "app.jnlp",
width: 300,
height: 200
},
{
jvm: "1.7.0+",
javafx: "2.2+",
},
{
onDeployError: reportError
}
);
}
dtjava.addOnloadCallback(deployIt);
</script>
</head>
<body>
<div id="place"></div>
</body>
例19-15は、JavaFXのインストールを提案するデフォルトのテキストを置換するためのJavaScriptの使用を示しています。 正しいバージョンのJavaFXがユーザーのシステムに見つかった場合のみ、アプリケーションの起動を提案するという内容に置換されます。
例19-15 JavaFXがインストールされている場合のみの起動
<html>
<head>
<script type="text/javascript"
src="https://java.com/js/dtjava.js"></script>
<script>
function mayBeOfferLaunch() {
var platform = new dtjava.Platform({'javafx' : '2.2+'});
//check if validate find any problems
if (dtjava.validate(platform) == null) {
var t = document.getElementById("text");
t.innerHTML = "<a href='my.jnlp' " +
"onclick='dtjava.launch({url: 'my.jnlp'}); return false;'>" +
"Launch me!</a>";
}
}
dtjava.addOnloadCallback(mayBeOfferLaunch);
</script>
</head>
<body>
<div id="text">To view this content you need
<a href="http://javafx.com">to install
JavaFX Runtime 2.2</a>.</div>
</body>
</html>