1

これについては、David Flanagan の「JavaScript - The Definitive Guide」という本 (O'Reilly Answers でもこの質問をしたことがあります)、または他の場所で言及されているのを見たことがありませんが、window.onunload を見つけています。ドキュメントが完全にロードされない限り呼び出されないため、非常に面倒です! 少なくともIE8とChrome 3には当てはまります

Web ページの下部に追加したい Javascript があります。ページが読み込まれる前に (^ 下記参照)、ユーザーがたまたまページから離れてしまい、Javascript が実行される前に、onunload でそれをトラップしたいと考えていました。しかし、onunload イベント ハンドラーはドキュメントが完全に読み込まれたときにのみ呼び出されるため、これは不可能です。onunload を使用できない場合、同じことを達成するために他に使用できるものはありますか?

^ 「Javascript - The Definitive Guide」では、ページが読み込まれるまで、ユーザーによるページとの対話は発生しないことが示唆されています。これは間違っていると思います。本の内容は次のとおりです。

) そして、そのようなイベント ハンドラーがまだ解析されていないドキュメントの一部を操作しようとすると、失敗します。このシナリオは実際にはまれであり、積極的に保護するために余分なコーディング作業を行う価値は通常ありません。」 (第 5 版、256 ページ)

IE8 でテストを実行したところ、ページの読み込み中のどの段階でも、ページとやり取りできる (そしてアンカー リンクを介してページを離れることができる) ことが示されました。

助けてくれてありがとう、ポール

4

1 に答える 1

0

ドキュメントが解析されるまで onunload イベントが発生しないことは、私には理にかなっています。通常、ドキュメントの解析とスクリプトの実行は同じスレッドで実行されます。ユーザーがページから移動すると、onunloadイベントが発生した後にスレッドがキャンセルされます。ユーザーがページから離れた時点で解析がスレッドを使用しているため、ブラウザーには次のオプションがあります。

  • 解析を完了し、アンロード イベントを発生させます。これにより、次のページへのナビゲーションが遅延するため、これは実際には実行可能なオプションではありません。
  • 解析をキャンセルし、アンロード イベントを発生させます。これはより実現可能なオプションですが、一部の UA が問題を抱えていない可能性があります。
  • スレッドを停止して次のページに移動するだけです - これはIEとChromeで起こっているようです

onbeforeunloadイベントが発生したかどうかを確認できますか? 私はそれが違いを生むとは思わない。最善の方法は、ページを最適化して読み込みを高速化する方法を検討することだと思います.

于 2010-02-03T17:18:09.040 に答える