3

新しい Google chrome ブラウザー、つまりバージョン 17 以降 (他のブラウザーもこれを行うかどうかは不明) の場合、デフォルトで事前レンダリング機能があるようです ( http://support.google.com/chrome/bin/answer. py?hl=en&answer=1385029 ) が有効になっているため、ユーザーがアドレス バーに URL を入力し終える前にページが読み込まれます。

これはほとんどが静的なコンテンツを持つページにとっては良いトリックだと思います。これは、ユーザーを欺いて、ページを効果的に先にロードすることで、ページのロードを高速化するようにします。ただし、これは、ロード時に何らかのアクション/ロジックをトリガーするページでは問題になります。

たとえばwebsocket、サーバーへの接続を確立し、ロードされるとすぐにメッセージを送信するページを考えてみましょう。ユーザーがこのページの URL を入力している間に、接続が確立されて msg が送信される可能性がありますが、ユーザーが実際にアドレス バーで「Enter」を押すと、websocket接続が失われ、再度確立され、msg が送信されます。これはおそらく、websocket が実際のページの読み込みを更新として扱うためです。現在、切断または特定のメッセージの受信に応答するロジックがある場合、これによりサーバー側で混乱を招く動作が発生する可能性があります。もう 1 つの例はリダイレクトです。この場合、ページが事実上 2 回読み込まれるため、二重のリダイレクトが発生する可能性があります。

開発者が制御できない機能をオフにする以外に、このブラウザ機能に対処する効果的な方法はありますか? いくつかのJavaScriptトリック?

4

2 に答える 2

1

https://developers.google.com/chrome/whitepapers/pagevisibilityを参照して ください

document.webkitVisibilityState を使用して、「prerender」状態かどうかを確認します。「prerender」状態の場合は、websocket を接続しないでください。

お役に立てれば。乾杯!

于 2012-12-25T09:47:28.480 に答える