Опера: Обнаружение назад, вперед, обновить и закрыть события - PullRequest
2 голосов
/ 27 августа 2009

В настоящее время я работаю над плагином jQuery, который отслеживает поведение мыши посетителей. Движения, щелчки, прокрутка и изменение размера записываются и отправляются через Ajax в место, где эти данные анализируются и сохраняются.

Первоначально данные отправляются в сценарий, когда пользователь покидает страницу. Под «листьями» я имею в виду обновление, просмотр истории, закрытие окна / вкладки и переход на другой адрес.

Решение работает во всех браузерах, КРОМЕ Opera. Я использую событие jQuery 'unload', которое вообще не поддерживается Opera. Ни один из них не загружен или не загружен.

Вопрос в том, как реализовать такую ​​функциональность для браузеров Opera?

Одним из решений, которое у меня было, было специальное использование созданной мной функции опроса. Эта функция позволяет указать интервал, который отправляет контент на сервер каждые «х» секунд. Установка этого значения в 1 секунду специально для браузеров Opera, вероятно, решит эту проблему, но это огромные накладные расходы, и запросы не всегда выполняются последовательно и т. Д. *

Какие-либо предложения или я застрял только с вышеуказанным вариантом?

Спасибо!

Полагаю, я мог бы просто связать вас, ребята, с источником плагинов. http://www.thedrunkenepic.com/junk/jquery.mousalytics.js

Относительно кода, указанного выше, добавить:

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

На линии 89 отлично работает. Моя единственная проблема - накладные расходы, поэтому я все еще ищу более элегантное решение.

Ответы [ 3 ]

2 голосов
/ 27 августа 2009

Согласно 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 указывает, что это может возможно с opera.io.webserver.addEventListener('_close', onunload, false); (где onunload является предварительно определенной функцией), однако это также указывает на то, что эта функциональность не согласована во все версии оперы, и может не работать вообще.

Я думаю, что вам лучше всего использовать опцию опроса для Opera или использовать проверку на стороне сервера для текущей страницы и места, где она находится в очереди истории.

1 голос
/ 28 февраля 2012

У меня была такая же проблема, и это спасло мой день:

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

Более подробную информацию об этой проблеме можно найти по адресу: http://www.opera.com/support/kb/view/827/

1 голос
/ 27 августа 2009

Работает ли добавление этой строки JavaScript для вас?

history.navigationMode = 'compatible';

Источник: http://www.opera.com/support/kb/view/827/

...