如何在greasemonkey中取消绑定jquery事件处理程序?

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

在greasemonkey中,click事件不会解除绑定。 我相信这是由于greasemonkey的安全模型从XPCNativeWrapper的第一行包装相关的事件对象引起的,导致第二行无法“找到”它。 但是,我似乎无法找到解决方法。 有什么建议?

更新:像下面这样的东西在greasemonkey中起作用。 所以我仍然认为这是一个XPCNativeWrapper问题,我无法找到解决方法。

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

我认为在调用unbind()函数后添加了jQuery单击事件。 这就是以下代码的工作原理。

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

在您单击“确定”后单击警报按钮并且unbind()函数工作之前,您的函数会有一段时间过去。

这是我测试过的解决方案:

 function removeClick() { $("p").unbind('click'); } var initTimeout = setTimeout(function() { removeClick(); }, 1000); 

如果您不喜欢在greasemonkey脚本中使用超时或间隔,则可以将鼠标hover事件添加到p元素以删除单击。

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

你是如何加载JQuery的? 可能无法正确加载: http : //joanpiedra.com/jquery/greasemonkey/

编辑或编辑JQuery代码,如下所述: http : //forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

这样做:

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