5

Firefox 3.6/Mac で奇妙な動作に遭遇しました。ただし、これは一般的な Firefox の動作であると思われます。

window.location.hrefプロパティを変更して新しい URL に移動する2 つの非常に単純なテスト ページを作成しました。

いずれかのファイルで次のことを試した場合:

  • 新しい/空白のブラウザー タブを開きます。
  • URLを貼り付けて「Enter」を押します。

この 2 つの違いに気付くでしょう。最初のリンクを使用すると、ブラウザの [戻る] ボタンが無効になります。2番目を使用すると、有効になり、期待どおりに機能します。

2 つのスクリプトの唯一の違いは、後者が変更前に 1 秒のタイムアウトを設定することwindow.location.hrefです。

なぜこれが起こるのかわかりません.2番目のスクリプトの動作(「戻る」ボタンが期待どおりに機能し続ける)を、ユーザーに遅延を引き起こすことなく実現しようとしています.

私の最善の推測では、開発者が後者を使用するつもりだったときに前者を使用するのが一般的だと思うので、おそらくFirefoxはメソッドwindow.location.hrefを使用するのと同じ設定で即時の「リダイレクト」を扱います。window.location.replace()を使用setTimeoutすると、コードが非同期で実行されるため、この動作が無効になる可能性があります。そうなのだろうか?

setTimeout目的の効果を得るためにの最小値を試したことはありませんが、ここで行います。しかし、なぜこれが正確に起こるのかを理解したいと思います。

ありがとう!

4

2 に答える 2

2

ページの読み込み中に location.href を設定すると、置き換えとして扱われると想定するのは正しいことです。実際には、2 つの別個の動作があります。

1 つ目は、タグの解析の結果として実行されるスクリプトから location.href を設定すると、常に置換として解釈されることです。これは、Netscape 4 の動作を反映するために実装され、その後 微調整されました。

2 つ目は、onload ハンドラーの結果としてロードされた新しいドキュメントも、常に置換として解釈されることです。これは実装され、微調整もされました。

しかし、なぜあなたがこれを行うことに熱心なのか知りたいのですが、それは、ユーザーがあなたのページの前のページに移動するには、[戻る] ドロップダウン メニューを使用する必要があるためです。(現在のページにリダイレクトし続けると、1 ページ戻っても意味がありません。)

于 2011-01-18T00:53:29.103 に答える
1

おそらく Firefox は、window.location.href を window.location.replace() メソッドを使用するのと同じように設定することで、即時の「リダイレクト」を処理するのではないでしょうか。後者。おそらくsetTimeoutを使用すると、コードが非同期で実行されるため、この動作が無効になります。そうなのだろうか?

あなたの推測は正しいと言われましたが、今見てみると、 HTML5仕様でこの要件について言及されていないようです(要件がないことにリンクするのは難しいため、最も関連性の高いページにリンクしています)。

于 2010-10-27T04:27:28.000 に答える