Как мне отменить привязку обработчиков событий jquery в greasemonkey? - PullRequest
2 голосов
/ 25 марта 2011
$("p").click(function(){alert('clicked')});

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

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

ОБНОВЛЕНИЕ: что-то вроде следующего работает в greasemonkey. Поэтому я все еще думаю, что это проблема XPCNativeWrapper, и я не могу найти способ ее решить.

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

Ответы [ 3 ]

1 голос
/ 08 октября 2012

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

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

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

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

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

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

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

$("p").mouseover(function(){
    $(this).unbind('click');
});
0 голосов
/ 27 мая 2012

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

window.addEventListener('load', function ()
{
    jQuery = unsafeWindow['jQuery'];
    jQuery(document).unbind("contextmenu");
    jQuery(document).unbind("keypress");
    jQuery(document).unbind("selectstart");
    jQuery(document).unbind("mousedown");
});
0 голосов
/ 25 марта 2011

Как вы загружаете JQuery? Может быть загружен неправильно: http://joanpiedra.com/jquery/greasemonkey/

EDIT Или отредактируйте код JQuery, как описано здесь: http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

...