Как отключить обработчики событий jquery в greasemonkey?

$("p").click(function(){alert('clicked')});

$("p").unbind('click');

Внутри greasemonkey событие click не отвязывает. Я полагаю, что это вызвано тем, что модель безопасности greasemonkey переносит связанный объект события из первой строки в XPCNativeWrapper, в результате чего вторая строка не может "найти" ее. Однако я не могу найти способ обхода. Любые предложения?

UPDATE: что-то вроде следующего работает в greasemonkey. Поэтому я все еще думаю, что проблема XPCNativeWrapper не может найти способ решить.

$("p").click(function(){alert('clicked'); $(this).unbind('click')});

Ответ 1

Я думаю, что события jQuery click добавляются после вызова функции unbind(). Вот почему работает следующий код.

$("p").click(function(){alert('clicked'); $(this).unbind('click')});

Некоторое время истекает в вашей функции до тех пор, пока вы не нажмете кнопку предупреждения, и функция unbind() будет работать после нажатия OK.

Вот решение, которое я тестировал:

function removeClick() {
    $("p").unbind('click');
}

var initTimeout = setTimeout(function() { removeClick(); }, 1000);

Если вам не нравится использование тайм-аутов или интервалов в greasemonkey script, вы можете добавить событие mouseover к вашим элементам p, чтобы удалить клик.

$("p").mouseover(function(){
    $(this).unbind('click');
});

Ответ 3

Сделайте это так:

window.addEventListener('load', function ()
{
    jQuery = unsafeWindow['jQuery'];
    jQuery(document).unbind("contextmenu");
    jQuery(document).unbind("keypress");
    jQuery(document).unbind("selectstart");
    jQuery(document).unbind("mousedown");
});