Copyright © 2021-2023 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
この仕様は、MiniApp のライフサイクルイベントと、MiniApp および各ページの ライフサイクルを管理するプロセスを定義する。この仕様を実装することで、ユーザーエージェントは、 グローバルアプリケーションライフサイクルとページライフサイクルの両方のライフサイクルイベントを管理できるようになる。
このセクションは、この 文書の公開時点における位置付けについて説明する。現在の W3C 公開文書の一覧と、この技術報告書の最新版は、 W3C 技術 報告書索引( https://www.w3.org/TR/)にある。
この文書は、MiniApps ワーキング グループにより、 勧告トラックを用いた 作業草案として公開された。
作業草案としての公開は、 W3C およびその会員による支持を意味するものではない。
これは草案文書であり、いつでも他の文書によって更新、置換、または廃止される可能性がある。 この文書を進行中の作業以外のものとして引用することは不適切である。
この文書は、 W3C 特許 ポリシーの下で運営されているグループにより作成された。 W3C は、 グループの成果物に関連して行われた特許開示の公開一覧を 維持している。そのページには、 特許を開示するための手順も含まれている。個人が、当該個人が 必須クレームを含むと考える特許について実際の 知識を有している場合、その情報を W3C 特許ポリシーのセクション 6に従って開示しなければならない。
この文書は、 2021年11月2日版 W3C プロセス文書に準拠する。
MiniApp 標準化ホワイトペーパーで説明されているように、miniapp では、ビュー層がロジック層から分離されている。 ビュー層は、Web レンダリングとネイティブレンダリングを含む MiniApp ページのレンダリングを担当し、 これはハイブリッドレンダリングと見なすことができる。ロジック 層は JavaScript Worker で実装される。ロジック層は、MiniApp のイベント 処理、API 呼び出し、およびライフサイクル管理を担当する。
MiniApp ライフサイクル機構は、MiniApp のグローバルアプリケーションライフサイクル イベントおよび MiniApp のページライフサイクルイベントを通じて、 MiniApp のビュー層とロジック層を管理する手段を提供する。MiniApp のグローバルアプリケーションライフサイクル状態および MiniApp のページライフサイクル状態に関する知識をもって MiniApp を開発することで、ユーザー体験を向上させることができる。MiniApp ライフサイクルには一連のイベントが含まれ、 MiniApp はそれらにより、自身の状態に基づいて振る舞いを変更することを選択できる。
この仕様は、MiniApp グローバルアプリケーションのライフサイクルが何であるかを定義し、MiniApp が一般的に実行する 5 つの重要なグローバルアプリケーションライフサイクルイベントに応答できるようにする定義を追加する:
MiniApp の初期化
MiniApp のフォアグラウンドでの 実行
MiniApp のバックグラウンドでの 実行
MiniApp のエラー状態
MiniApp のアンロード中
各 MiniApp は、初期化後、フォアグラウンドで実行中またはバックグラウンドで実行中のいずれかになる。
ユーザーが MiniApp 上の閉じるボタンをクリックして MiniApp を閉じることを選択した場合、またはモバイル 端末のホーム画面に移動した場合、MiniApp は直ちに破棄されず、バックグラウンドで実行中に切り替わる。
ユーザーが同じ MiniApp を再度開くと、MiniApp はバックグラウンドで実行中からフォアグラウンドで実行中に切り替わる。
アンロード中は、MiniApp セッションの終了、および キャッシュからのすべての一時リソースの削除を示す。MiniApp ユーザーエージェントは、MiniApp が 条件を満たした時点でこの削除を実行する。MiniApp が一定時間(例: 5 分)を超えてバックグラウンドで実行されている場合、またはバックグラウンドで過剰なシステムリソースを占有している場合、 MiniApp はアンロードされるべきである。
この仕様は、上記のグローバルアプリケーションライフサイクルイベントをサポートするために、 5 つのグローバルアプリケーションライフサイクル状態を形式化する:
Service Workers などの既存の Web 仕様への対応は、 MiniApp Lifecycle Explainerに記載されている。
MiniApp のグローバルアプリケーション
ライフサイクル状態は、API では GlobalState 列挙型を介して反映される。
WebIDLenum GlobalState {
"launched", "shown", "hidden", "error", "unloaded"
};
GlobalState 列挙型は、
グローバルアプリケーションライフサイクル状態を表すために使用される。
"launched" 列挙値は、起動済み
グローバルアプリケーションライフサイクル状態を表す。
"shown" 列挙値は、表示中
グローバルアプリケーションライフサイクル状態を表す。
"hidden" 列挙値は、
グローバルアプリケーションライフサイクル状態を表す。
"error" 列挙値は、エラー
グローバルアプリケーションライフサイクル状態を表す。
"unloaded" 列挙値は、アンロード済み
グローバルアプリケーションライフサイクル状態を表す。
WebIDL[Exposed=Window]
interface Global {
readonly attribute GlobalState globalState;
readonly attribute InputObject inputObject;
readonly attribute LifecycleError lifecycleError;
attribute EventHandler ongloballaunched;
attribute EventHandler onglobalshown;
attribute EventHandler onglobalerror;
attribute EventHandler onglobalunloaded;
};
取得時、globalState 属性は、GlobalState を返さなければならない。
inputObject には、
MiniApp のページパス、MiniApp のソース情報など、MiniApp の基本情報が含まれる。
lifecycleError には、エラー状態イベント型のエラー指示
情報が含まれる。
ongloballaunched 属性は、イベント
ハンドラー IDL 属性であり、初期化イベント型のためのものである。この
イベントがトリガーされると、globalState は起動済みに設定される。
onglobalshown 属性は、イベント
ハンドラー IDL 属性であり、フォアグラウンドでの実行イベント型のためのものである。このイベント
がトリガーされると、globalState は表示中に設定される。
onglobalerror 属性は、イベント
ハンドラー IDL 属性であり、エラー状態イベント型のためのものである。このイベントが
トリガーされると、globalState はエラーに設定される。
onglobalunloaded 属性は、イベント
ハンドラー IDL 属性であり、アンロード中イベント型のためのものである。このイベントが
トリガーされると、globalState はアンロード済みに設定される。
WebIDL[Exposed=Window]
interface InputObject {
readonly attribute DOMString pagePath;
readonly attribute DOMString referrerInfo;
readonly attribute DOMString lang;
readonly attribute TextDirection dir;
};
TextDirection 列挙型
WebIDLenum TextDirection {
"auto",
"ltr",
"rtl"
};
テキスト方向の値は次のとおりであり、人間が読めるメンバーの値がデフォルトで 次のようになることを示す:
autoltrrtl
取得時、pagePath 属性は、現在の MiniApp のページパスを返さなければならない。
referrerInfo 属性には、
MiniApp ID、および人間が読める値を含む任意の追加データを含む、MiniApp のソース情報が含まれる。
lang
属性の値は、[BCP47] で定義される
整形式の言語タグでなければならない。
dir
属性は、referrerInfo 属性の値に人間が読める値が含まれる場合、その値の基本方向を指定する。
WebIDL[Exposed=Window]
interface LifecycleError {
readonly attribute DOMString errorDescription;
readonly attribute DOMString lang;
readonly attribute TextDirection dir;
};
errorDescription 属性は、
エラー グローバルアプリケーションライフサイクル状態についての、
開発者に分かりやすいテキスト説明である。
lang
属性の値は、[BCP47] で定義される
整形式の言語タグでなければならない。
dir
属性は、errorDescription
属性の値の基本方向を指定する。
この仕様は、MiniApp ページのライフサイクルが何であるかを定義し、MiniApp が一般的に実行する 5 つの重要なページライフサイクルイベントに応答できるようにする定義を追加する:
MiniApp のページ読み込み
MiniApp のページ初回レンダー 準備完了
MiniApp のページが フォアグラウンドで実行中
MiniApp のページが バックグラウンドで実行中
MiniApp のページアンロード中
ユーザーが初めて MiniApp を開くと、MiniApp の初期化が開始される。ビュー層とロジック層は、 同時に初期化を開始する。
ロジック層の初期化が完了すると、MiniApp インスタンスを 作成する。同時に、ビュー層の 初期化が完了すると、ビュー層と ロジック層の間に通信チャネルを確立するために、 MiniApp のページ 読み込みを開始する。
ビュー層が、ロジック層から入力された初期データに基づいて ページ UI の更新を完了した場合、初回レンダーは完了したものと見なされ、その後 ビュー層はロジック層に通知し、 MiniApp のページ初回レンダー準備完了をトリガーする。
その後、ユーザーは MiniApp と対話できる。ビュー層は、 ユーザーイベントをロジック層に 送信してさらに処理するようトリガーでき、その後ロジック層は結果データをビュー層に返し、再レンダリングを行う。
ユーザーが現在の MiniApp ページを離れた場合(例: 別の MiniApp ページへナビゲートした場合)、 MiniApp のページがバックグラウンドで実行中がトリガーされる。 MiniApp ページが再度開かれた場合、MiniApp のページがフォアグラウンドで実行中がトリガーされる。
ユーザーが現在の MiniApp ページを閉じた場合、MiniApp のページ アンロード中がトリガーされる。
この仕様は、上記のページ ライフサイクルイベントをサポートするために、5 つの MiniApp ページ ライフサイクル状態を形式化する:
Page Visibility などの既存の Web 仕様への対応は、MiniApp Lifecycle Explainerに記載されている。
MiniApp のページライフサイクル状態は、API では
PageState 列挙型を介して反映される。
WebIDLenum PageState {
"loaded", "ready", "shown", "hidden", "unloaded"
};
PageState 列挙型は、
MiniApp のページライフサイクル状態を表すために使用される。
"loaded" 列挙値は、ページ読み込み済み
ページライフサイクル状態を表す。
"ready" 列挙値は、ページ準備完了
ページライフサイクル状態を表す。
"shown" 列挙値は、ページ表示中
ページライフサイクル状態を表す。
"hidden" 列挙値は、
ページライフサイクル状態を表す。
"unloaded" 列挙値は、ページアンロード済み
ページライフサイクル状態を表す。
WebIDL[Exposed=Window]
interface Page {
readonly attribute PageState pageState;
readonly attribute PageInputObject pageInputObject;
attribute EventHandler onpageloaded;
attribute EventHandler onpageready;
attribute EventHandler onpageshown;
attribute EventHandler onpageunloaded;
};
取得時、pageState
属性は、PageState を返さなければならない。
pageInputObject には、MiniApp ページの読み込み用のpageInputQuery が含まれる。
onpageloaded 属性は、イベント
ハンドラー IDL 属性であり、ページ読み込みイベント型のためのものである。このイベント
がトリガーされると、pageState はページ読み込み済みに設定される。
onpageready 属性は、イベント
ハンドラー IDL 属性であり、ページ初回レンダー準備完了イベント型のためのものである。この
イベントがトリガーされると、pageState はページ準備完了に設定される。
onpageshown 属性は、イベント
ハンドラー IDL 属性であり、ページがフォアグラウンドで実行中イベント型のためのものである。この
イベントがトリガーされると、pageState はページ表示中に設定される。
onpageunloaded 属性は、イベント
ハンドラー IDL 属性であり、ページアンロード中イベント型のためのものである。この
イベントがトリガーされると、pageState はページ
アンロード済みに設定される。
WebIDL[Exposed=Window]
interface PageInputObject {
readonly attribute DOMString pageInputQuery;
};
pageInputQuery 属性には、
MiniApp ページ用に入力されたクエリが含まれる。
このセクションは非規範である。
MiniApp グローバルライフサイクルを処理する例:
const doGlobalLaunched = (inputObject) => {
console.log(inputObject.pagePath);
};
global.addEventListener('globallaunched', doGlobalLaunched);
MiniApp ページライフサイクルを処理する例:
const doPageLoaded = (pageInputObject) => {
console.log(pageInputObject.pageInputQuery);
};
page.addEventListener('pageloaded', doPageLoaded);
このセクションは非規範である。
MiniApp のフォアグラウンドでの実行およびバックグラウンドでの実行イベントにより、開発者は MiniApp がいつ表示されているかを知ることができる。ページがフォアグラウンドで実行中イベントを 使用することで、開発者は MiniApp ページがページがフォアグラウンドで実行中に切り替わる前に、 機密データを処理して隠すことを選択できる。ページアンロード済み イベントは、ページが アンロードされていることの通知を提供する。
このセクションは非規範である。
MiniApp グローバルアプリケーションライフサイクルインターフェイス Global は、MiniApp 用に入力された
クエリ、現在の MiniApp のページパス、およびソース情報の処理を伴う inputObject を導入する。MiniApp ページ
ライフサイクルインターフェイス Page は、MiniApp ページ用に入力されたクエリの処理を
伴う pageInputObject を導入する。
認可されていない追跡の潜在的な脅威からユーザーを保護するため、これらの値をローカルに保存することは推奨されない。
これらの値を保存する場合、ユーザーがそれらを消去しようとしたときに、そのストレージは消去されるべきである。
MiniApp 用に入力されたクエリまたは MiniApp ページ用に入力されたクエリにプライバシーに関わる 情報(例: ユーザーの個人データ)が含まれる場合、そのプライバシーに関わる情報は平文であってはならない。
このセクションは非規範である。
MiniApp ライフサイクルは、(場合によっては)ユーザー操作への応答を伴う。たとえば、GlobalState
は、MiniApp が表示中かかを示す。PageState
は、MiniApp ページがページ表示中かかを示す。
ユーザーエージェントは、MiniApp ライフサイクル状態についてアクセシビリティサービスと適切に通信すべきである。
たとえば、取得時に、GlobalState および PageState は、それぞれ MiniApp グローバルアプリケーション
ライフサイクル状態および MiniApp ページライフサイクル状態をアクセシビリティサービスに返すべきである。
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: