19

次のJavaScriptリダイレクトコードの後に​​コードを追加しました。javascriptのリダイレクト(window.location.hrefの設定)後のコードはどうなりますか?

window.location.href = '/someurl'; 
alert('hello'); 
alert('hello again'); 

これは、ブラウザの不一致を引き起こします。

firefoxでは、リダイレクトされる直前に最初のアラートが1秒間表示されます。 2番目のアラートはまったく表示されません。

クロムでは、両方のアラートがポップアップし、両方のアラートで[OK]をクリックするとリダイレクトが行われます。

これらの違いを解決できるリダイレクト後に何が起こるかの概念はありますか?リダイレクトが非同期の場合、クロムは何をしていますか?何が起きているのか理解したいので、コールバックや他のロジックの中にリダイレクトが深く埋もれている、より複雑なシナリオで何をすべきかを判断することができます。

+1

リダイレクト後に何をしたいのですか? – Musa

+0

これはすべてタイミングに依存します。一度位置を変更すると、プロセス/レンダリングにかかる​​時間に依存できません。 –

+0

@Musa実際にはリダイレクト後に何もしたくないので、この質問が出てきました。例えば、他のライブラリのコードからトリガされたコールバックでリダイレクトが発生すると想定される場合、ライブラリがコールバックを呼び出した後にライブラリによって実行される他のものが存在する可能性があります。しかし、他のものを動かさずにページをリダイレクトしたいのであれば、ブラウザが何をしようとしているかに応じて、通常通り続行しないようにする必要があります。 – user1385729

答えて

10

ページは、次のWebアドレスになるまでブラウザがwindow.location.href = 'url'後にコードを実行しようとしますので、実行されるコードの行数は、ブラウザの速度に依存Javascriptのセッションはに苦労しそうだ

+0

ありがとう、これは妥当と思われる。私はリダイレクトの後に長い実行ループを追加することでこれをテストしようとしています。速度の問題だった場合、ブラウザはループの途中でランダムにリダイレクトしませんか? chromeとfirefoxの両方とも、ループに何があっても(すべてのコードがループに入っていなければ)、すべてのコードを実行しているように見えます。この場合、Firefoxはその時点でリダイレクトに行きます。私は長い実行ループテストが最良のテストであるかどうかは分かりません... – user1385729

+0

あなたは正しいです。たぶんそれは速度ではなく、各javascript関数の優先順位です。 –

+0

@DaniloValenteあなたはこれを確認するための任意のリソースを持っています –

16

切迫した運命に直面してその使命を続ける。このようなコーディングは予測不可能と考えられます。 ...そして残酷。

+1

これは最高の答えだと思う。この動作は未定義です。 – styfle

+1

+1000あなたのために。 – Houssni

関連する問題