Как отключить обработчики событий 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');
});
Ответ 2
Как вы загружаете JQuery? Может не загружаться должным образом: http://joanpiedra.com/jquery/greasemonkey/
ИЗМЕНИТЬ
Или отредактируйте код JQuery, как описано здесь: http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error
Ответ 3
Сделайте это так:
window.addEventListener('load', function ()
{
jQuery = unsafeWindow['jQuery'];
jQuery(document).unbind("contextmenu");
jQuery(document).unbind("keypress");
jQuery(document).unbind("selectstart");
jQuery(document).unbind("mousedown");
});