2

これは専門的な質問です。ブラウザの JavaScript についてもっと深く学ぼうとしています。

したがって、シナリオは、page1 の唯一のものはリンクであり、場合によっては一部の JS であるということです。

<script>something</script>
<a href="/page2.php">link</a>

ページ 2 のリンクをクリックすると、JavaScript をページ 2 に「持ち越す」ことができますか?

私はあなたが次のようなことができると思っていました:

<a onClick="loadXMLDoc();" href="/page2.php">link</a>

loadXMLDoc 関数の抜粋:

var xmlhttp;
xmlhttp=new XMLHttpRequest();

xmlhttp.onreadystatechange=function()
      {

window.location = "/page2.php";

if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
alert('worked');

}
...
xmlhttp.open("POST","/responsedelay.php",true);
...

アイデアは、タイマー(php)を使用して別のページにajaxリクエストを作成し、数秒(たとえば10秒)後に応答を返すことです。その時までに、新しいページが読み込まれ、現在のウィンドウ DOM に JavaScript でアクセスできることを願っています。残念ながら、それはうまくいきませんでした。何か案は?

唯一の方法は、ページ 1 のコンテキスト内でページ 2 を開く (つまり、ページ 2 の要素をページ 1 に追加する) ことだと思いますが、私が知らない斬新な方法があるかもしれません!

4

1 に答える 1

1

https://html.spec.whatwg.org/multipage/browsers.html#browsing-contextは、基本的な概念を非常によく説明しています。

アドレスバーを介してページをロードするときはいつでも、現在のページのブラウジングコンテキストの一意の場所オブジェクトiframeを操作して言及したようにロードします。

簡素化: 場所を変更すると、現在のページの DOM は破棄され (技術的に逆参照されるため、ほとんどのエンジンでガベージ コレクションの準備ができています)、新しい場所から構築された DOM に置き換えられます。

ただし、 と のコンテキストは保持できますがwindow、DOM の一部を切り替えることができます。これは、 window.

コメントに記載されているターボリンクは、まさにそれを行います: オブジェクトとコンテキストを保持しますwindow、ドキュメントを置き換えますbody

最新のブラウザーでは、ほとんどすべてをプログラムで変更できます。

  • 現在のページのタイトル。
  • ブラウザの URL 入力フィールドの内容。
  • ブラウザの履歴なので、戻る/進むボタンなども機能します (Mark Pilgrim がこれについて素晴らしい記事を書いており、さらに明確にする必要があります)。

つまり、同じページを維持できますが、ユーザーにとっては、ブラウジングするように感じます。YouTube はその良い例です。動画から動画を閲覧すると、windowは保持されbodyますが、ヘッダーの一部、ブラウザの URL、タイトルなどはすべて変更されます。

YouTube の利点は、アクセスするすべてのビデオに対してさまざまなビデオ デコーダー ライブラリなどをリロードする必要がなく、最初のアクセス時に行うことです。

欠点は、バグがすぐに複雑になり、重要なユーザー フロー ([戻る] ボタンなど) を簡単に壊してしまうため、自分が何をしているのかを本当に理解する必要があることです。

于 2015-01-13T17:50:14.197 に答える