メインコンテンツへスキップ

remote.html vs index.html

playground.wordpress.net は、remote.htmlindex.html という 2 つの異なる HTML ファイルを通じて、2 つの異なる API を公開しています。それぞれの機能と違いの概要は次のとおりです。

  • index.html は、WordPress Playground API クライアントを使用して、remote.html という「エンドポイント」を制御します。
  • クエリ API は、WordPress Playground JavaScript API とは独立して、index.html によってのみ提供されます。
  • JavaScript API は、remote.html によってのみ提供されます。PlaygroundClient クラスの「エンドポイント」として使用できるのは、このファイルのみです。

これらの各ファイルについてもう少し詳しく説明します。

Remote.html

remote.html は WordPress を実行・レンダリングするだけでなく、開発者が WordPress を制御するための API も公開しています。重要なのは、remote.html はブラウザ UI やバージョンスイッチャーなどの UI 要素をレンダリングしないことです。これは WordPress そのもののことです。remote.html の主な機能は次のとおりです。

  • PHP の WebAssembly ビルドである php.wasm の適切なバージョンをロードします。
  • ユーザーインタラクション用に正しいバージョンの WordPress をロードします。
  • WebWorker で PHP を初期化し、HTTP リクエスト用の ServiceWorker を登録します。
  • 親ウィンドウからの message イベントをリッスンし、適切なコードコマンドを実行します。

最後の部分はパブリック API の仕組みです。親ウィンドウ(index.html)はコマンドと引数を含むメッセージをiframeremote.html)に送信し、iframeはそのコマンドを実行し、結果を別のメッセージで返します。

メッセージを送信するのは面倒なので、PlaygroundClient クラスはメッセージを内部で処理するオブジェクト指向 API を提供します。

迅速なテストとデバッグのために、remote.html は JavaScript API クライアントを window.playground として公開しています。これは、開発ツールから次のように使用できます。

> await playground.listFiles("/")
(6) ['tmp', 'home', 'dev', 'proc', 'internal', 'wordpress']

playground はこのコンテキストではクラスインスタンスであり、ブラウザの自動補完の恩恵を受けることができます。

Index.html

index.html は、WordPress Playground API クライアントを使用して remote.html を中心に構築された独立したアプリです。

ブラウザ UI、バージョンセレクター、そしてiframe経由でremote.htmlを埋め込むことで WordPress をレンダリングします。アドレスバーやバージョンセレクターなどの UI 機能は、PlaygroundClientを使用してremote.htmlと通信することで実装されます。

index.html は受信したクエリパラメータを監視し、適切な PlaygroundClient メソッドを呼び出します。例えば、?plugin=coblocksinstallPluginsFromDirectory( client, ['coblocks'] ) を呼び出します。このメカニズムがクエリ API の基盤となっています。

迅速なテストとデバッグのために、index.html は JavaScript API クライアントを window.playground として公開しています。これは、開発ツールから次のように使用できます。

> await playground.listFiles("/")
(6) ['tmp', 'home', 'dev', 'proc', 'internal', 'wordpress']

このコンテキストでは、playground は Proxy オブジェクトであり、ブラウザから自動補完は行われないことに注意してください。