2

私は現在、訪問者のマウスの動作を追跡するjQueryプラグインに取り組んでいます。動き、クリック、スクロール、サイズ変更はすべて記録され、Ajaxを介して、このデータが解析および保存される場所に送信されます。

元々、データはユーザーがページを離れるときにスクリプトに送信されます。「葉」とは、更新、履歴の前後の移動、ウィンドウ/タブの閉じ、別のアドレスへの移動を指します。

このソリューションは、Operaを除くすべてのブラウザで機能します。OperaでまったくサポートされていないjQueryの「unload」イベントを使用しています。onbeforeunloadでもonunloadでもありません。

問題は、Operaブラウザにこの種の機能を実装するにはどうすればよいですか?

私が持っていた解決策の1つは、作成した「ポーリング」機能を特別に使用することでした。この機能を使用すると、「x」秒ごとにコンテンツをサーバーにプッシュする間隔を指定できます。特にOperaブラウザ用にこれを1秒に設定すると、おそらくこの問題は解決しますが、それは非常に大きなオーバーヘッドであり、リクエストは常に順番に完了するとは限りません...

何か提案がありますか、それとも上記のオプションだけに固執していますか?

ありがとう!

プラグインソースにリンクするだけでいいと思います。http://www.thedrunkenepic.com/junk/jquery.mousalytics.js

上記のリンク先のコードについて、以下を追加します。

if(window.opera)
{
options.interval = 1;
}

89行目はうまく機能します。私の唯一の懸念はオーバーヘッドであるため、私はまだよりエレガントなソリューションを探しています。

4

3 に答える 3

2

http://bytes.com/topic/javascript/insights/799229-browser-quirk-onload-onunload-do-not-fire-back-forward-refresh-operaによると、Operaはonload/onunloadイベントを実際に発生させることはありません。このような機能は、ハックなしでは不可能です。

http://dev.opera.com/articles/view/efficient-javascript/?page=4はこれを確認しているようで、基本的にOperaはリクエスト間でページの状態を維持しようとしていると述べています。

さらに調査すると、http://unitehowto.com/Onunloadは、 onunloadが以前に定義された関数である場合)で可能である可能があることを示しopera.io.webserver.addEventListener('_close', onunload, false);ていますが、この機能がオペラのすべてのバージョンで一貫しておらず、機能しない可能性があることも示していますまったく。

おそらく、Operaのポーリングオプションを使用するか、現在のページとそのページが履歴キューのどこにあるかについてサーバー側のチェックを使用するのが最善のオプションだと思います。

于 2009-08-27T15:46:26.113 に答える
1

このJavaScriptの行を追加することはあなたのために働きますか?

history.navigationMode = 'compatible';

出典:http ://www.opera.com/support/kb/view/827/

于 2009-08-27T04:47:06.893 に答える
1

私は同じ問題を抱えていました、そしてこれは私の日を救いました:

if( typeof(opera) != 'undefined' )
{
    opera.setOverrideHistoryNavigationMode( 'compatible' );
    history.navigationMode = 'compatible';
}

この問題の詳細については、http ://www.opera.com/support/kb/view/827/をご覧ください。

于 2012-02-28T09:31:11.790 に答える