2


1

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

元々、データはユーザーがページを離れるとスクリプトに送信されます。 '葉’とは、さわやかなこと、歴史の中を行き来すること、ウィンドウ/タブを閉じること、そして別のアドレスに移動することを指します。

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

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

解決策の1つは、作成した「ポーリング」機能を特別に使用することでした。 この機能を使用すると、「x」秒ごとにコンテンツをサーバーにプッシュする間隔を指定できます。 特にOperaブラウザのためにこれを1秒に設定することはおそらくこの問題を解決するでしょう、しかしそれはひどい量のオーバーヘッドであり、要求は常に順番に完了されるとは限りません、等…​

何か提案や私は上記のオプションで立ち往生していますか?

ありがとうございます。

私はあなたたちをプラグインのソースにリンクさせることができると思います。 http://www.thedrunkenepic.com/junk/jquery.mousalytics.js_

上記でリンクされたコードに関して、追加:

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

89行目ではうまくいきました。 私の唯一の関心事はオーバーヘッドです、それで私はまだもっとエレガントな解決策を探しています。

3 Answer


2


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

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

私はあなたの最善の選択肢はおそらくOperaのポーリングオプションを使うか、おそらく現在のページとそれが履歴キューのどこにあるかをサーバーサイドでチェックすることだと思います。


1


このJavaScriptの行を追加しても問題ないでしょうか。

history.navigationMode = 'compatible';

ソース:http://www.opera.com/support/kb/view/827/


1


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

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

この問題の詳細については、次のWebサイトを参照してください。http://www.opera.com/support/kb/view/827/