Events Safari扩展上下文菜单项命令事件已触发两次

Events Safari扩展上下文菜单项命令事件已触发两次,events,safari,contextmenu,Events,Safari,Contextmenu,我为Safari开发了一个使用上下文菜单的扩展 在代码中,我正在使用以下命令侦听上下文菜单项的命令事件: safari.application.addEventListener("command", commandHandler, false); 在commandHandler函数中,我添加了一条用于调试的警报语句。通过这样做,我发现每当我单击上下文菜单项时,commandHandler函数都会触发两次 此外,我还添加了一个工具栏项,它还可以在单击时触发命令事件。附加到命令事件的函数在单击该项

我为Safari开发了一个使用上下文菜单的扩展

在代码中,我正在使用以下命令侦听上下文菜单项的命令事件:

safari.application.addEventListener("command", commandHandler, false);
在commandHandler函数中,我添加了一条用于调试的警报语句。通过这样做,我发现每当我单击上下文菜单项时,commandHandler函数都会触发两次

此外,我还添加了一个工具栏项,它还可以在单击时触发命令事件。附加到命令事件的函数在单击该项后也会触发两次


有人知道这个问题以及如何解决吗?

没有更多信息,这听起来像是过滤不足的问题。也就是说,您正在接收所有的命令消息,而不确定它们是哪条消息,也不确定它们为什么流经回调层,而回调层在给定的未知配置中,每次单击都会收到两条消息

Safari extensions的事件通知回调结构允许您针对同一事件类型注册多个事件,并且在许多情况下可能会生成多个不同的事件。为此,您尝试将事件侦听器添加到命令范围意味着您实际上正在接收传递到回调层的所有命令。例如,如果存在复杂的嵌套关系a包含B,其中a和B都发出通知,或者存在复杂的行为模式(例如,mousedown后跟mouseup),则可能会多次触发

Apple,通过将命令绑定到特定目标或特定命令,这是您应该在此处执行的操作。以防万一这还不够,这里有一个


遵循指南应该允许您通过将事件正确绑定到对象并仅对需要的事件进行操作来解决此问题。事件处理程序应该忽略所有其他内容。

如果没有更多信息,这听起来像是过滤不足的问题。也就是说,您正在接收所有的命令消息,而不确定它们是哪条消息,也不确定它们为什么流经回调层,而回调层在给定的未知配置中,每次单击都会收到两条消息

Safari extensions的事件通知回调结构允许您针对同一事件类型注册多个事件,并且在许多情况下可能会生成多个不同的事件。为此,您尝试将事件侦听器添加到命令范围意味着您实际上正在接收传递到回调层的所有命令。例如,如果存在复杂的嵌套关系a包含B,其中a和B都发出通知,或者存在复杂的行为模式(例如,mousedown后跟mouseup),则可能会多次触发

Apple,通过将命令绑定到特定目标或特定命令,这是您应该在此处执行的操作。以防万一这还不够,这里有一个


遵循指南应该允许您通过将事件正确绑定到对象并仅对需要的事件进行操作来解决此问题。您的事件处理程序应该忽略所有其他内容。

这不是一个完美的答案,但让我找到了正确的方向。谢谢。@rdougan没问题。很乐意帮忙!这不是一个完美的答案,但让我找到了正确的方向。谢谢。@rdougan没问题。很乐意帮忙!