Iframe ベースのレンダリング
ページのリロードを避けるため、すべての PHPRequestHandler の応答はiframe内でレンダリングされる必要があります。
システム全体はメインの index.html が存在している間しか機能しないことを忘れないでください。メインアプリのリロードは、どんな犠牲を払ってでも避けるべきです。
上記のアプリの例では、index.php は以下のHTMLをレンダリングします。
<a href="page.php">page.php へ移動</a>
index.html が <iframe> ではなく <div> でレンダリングされたと想像してみてください。そのリンクをクリックするとすぐに、ブラウザは index.html から page.php へ移動しようとします。しかし、index.html はワーカースレッド、PHPRequestHandler、そしてそれらをサービスワーカーに接続するトラフィック制御を含む、PHP アプリケーション全体を実行します。ここから移動すると、アプリケーションは破壊されてしまいます。
ここで、同じリンクが含まれる iframe を考えてみましょう。
<iframe srcdoc='<a href="page.php">page.php へ移動</a>'></iframe>
今回はブラウザでリンクをクリックして、iframe内のpage.phpを読み込みます。PHPアプリケーションが実行されるトップレベルのindex.htmlは影響を受けません。そのため、@php-wasm/webの設定にはiframeが不可欠です。
Crash reports
Playgroundでは、クラッシュレポートが自動的に収集されることはありません。その代わり、ブラウザでインスタンスの実行に失敗した場合に、ユーザーにクラッシュレポートの提出を促します。
レポートにはログ、説明、URL が含まれており、ユーザーは送信前にレポートを変更できます。
Logger API がそこから処理を行います。このシンプルな REST API はデータを検証し、Making WordPress #playground-logs Slack チャンネル に送信します。
iframe の注意事項
target="_top"はまだ処理されていないため、target="_top"を含むリンクをクリックすると、作業中のページがリロードされます。iframeから発生する JavaScript ポップアップは、必ずしも表示されるとは限りません。