Можно ли фиксировать все события в веб-браузере? - PullRequest
3 голосов
/ 02 мая 2010

Я работаю над проектом для домашних животных и нахожусь на стадии исследования.

Краткое резюме

Я пытаюсь перехватить все отправленные формы, щелчок мышью и каждое нажатие клавиши. Моя библиотека выбора - это либо jquery, либо jquery + prototypejs. Я полагаю, что могу упаковать события в очередь / стек и отправить их обратно на сервер в пакетах с временным интервалом, чтобы поддерживать производительность относительно стабильной.

Беспокойство

Форма отправляется и изменения будут относительно простыми. Что-то вроде

$("form :inputs").bind("change", function() { ... record event... }); 

Но как гарантировать, что я получаю приоритет над обработчиками приложений, так как у меня есть привычка ставить return false для многих моих обработчиков форм, когда возникает проблема проверки. Насколько я понимаю, это эффективно останавливает событие на своем пути.

Мой проект

Для своих небольших удаленных клиентов я размещу их продукты на VPS или запускаю в своем домашнем дата-центре. В настоящее время я использую базовую систему аутентификации, учитывая имя пользователя и пароль, которые они видят на сайте, а затем, надеюсь, отправит мне несколько вменяемых заметок о том, что сломано или должно быть подправлено.

В качестве лучшего решения я написал простой прокси-веб-сервер, который выполняет вышеизложенное, но позволяет мне иметь одну запись DNS, а затем, в зависимости от учетных данных, выполняет внутренний запрос ретрансляции заголовков и при необходимости переписывает URL-адреса. Каждый запрос html / text или application / * сжимается и помещается в таблицу sqlite, поэтому я могу частично воспроизвести то, что они сделали. Теперь я перехожу к веб-интерфейсу и хочу захватывать клики, нажатия клавиш и отправлять все на странице.

1 Ответ

2 голосов
/ 02 мая 2010

Чтобы обойти проблему return false;, попробуйте поработать с пользовательскими событиями.

// Bind custom event to all forms

    $('form').bind('custom_submit_event',function() {
        alert('custom submit event');
    });

// Bind submit event to all forms that triggers the custom event

    $('form').submit(function() {
        $(this).trigger('custom_submit_event');
    });

// Your regular submit event for a specific form

    $('#myform').submit(function() {
        // Run validation/submission code
        return false;
    });

Я не очень часто использовал пользовательские события, но это работает для меня. Не знаю, почему это не сработает и с другими событиями.

Вы также можете назначить обработчики на document. Пока вы не затронули проблему return false;, их события будут всплывать в документе. Может быть лучше (более эффективно), чем накладные расходы многих обработчиков событий по всей странице.

    $(document).click(function() {
        alert('click')
    })
    .keydown(function() {
        alert('keydown')
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...