AJAX を介してあらゆる種類の情報をロードし、ユーザー入力に基づいて計算を行うことによって、多くの Javascript を含む複雑な Web サイトをロードしたと想像してください。それで、後でファイルから確実にロードできるように(おそらくインターネット接続がなくても)アーカイブして、その動作を調べたり、デバッグしたりできるようにしたいとします。これを行う方法はありますか?
3 に答える
ブラウザは、「戻る」ボタンを高速に動作させるためにすでにこれを行っています。Firefoxでは「bfcache」と呼ばれています。ただし、このキャッシュはメモリ内にのみ存在します。それをファイルにシリアル化できるかどうかはわかりません。もしそうなら、それは非常に興味深いでしょう。
各ピースを手動で見て保存することなく、DOM の状態全体をエクスポートする方法はないと思います。ソースに表示されているものよりも、その DOM を表す情報がたくさんあります。
たとえば、ウィンドウ オブジェクトで使用可能なウィンドウ スクロールバーの位置をwindow.scrollX
およびとして保存することができますwindow.scrollY
。これはほんの一例ですが、アタッチされたイベント ハンドラーなど、他にも保存すべき状態情報がたくさんあります。
他の部分を無視して目的に関連する部分を特定できる場合は、Google Gears (現在は廃止されています) または HTML5 で導入された新しいローカル ストレージを使用してローカルに保存できます。この情報を既にシリアル化している場合は、それを渡すことができます。いくつかのサーバーに移動し、そこから復元します。HTML5 の新しいストレージ メカニズムが呼び出されますがDOM Storage
、キーと値の両方が文字列である単なるキーと値のペアのストレージであるため、少し誤解を招く可能性があります。
編集:これは問題に対する別の見方かもしれませんが、ここにあります。DOM 状態全体を保存する代わりに、初期状態とそれを変更する関連アクションのみを保存できます。最終状態に到達するには、各アクションを順番に実行する再生メカニズムが使用されます。これはコマンド パターンとして知られる一般的なデザイン パターンです。これは、マルチプレイヤー ゲームが、ビュー全体ではなくキーストロークやマウスの動きなどのプレイヤー アクションのみを渡すことで、各プレイヤーを最新の状態に保ち、同期を維持する方法であり、レシーバーはそれらのアクションを適用して状態を更新します。実際にはそれよりもはるかに複雑ですが、それが核心です。
どこに保管しますか?
現在、ブラウザ側に何かを保存する方法はありません(新しいブラウザ機能を除いて、インストールしている人はほとんどいません)。DOMが十分に小さい場合、唯一の現実的な解決策はCookieを使用することです(これは、Cookieが特定の量のデータしか保持できないためです)。
DOMサーバー側の保存を検討している場合は、を使用document.body.innerHTML
して現在のDOM状態にアクセスし、それをサーバーに送信できます。