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

时间:2012-03-28 10:46:32

标签: events safari contextmenu

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

在代码中,我正在使用:

监听上下文菜单项的命令事件
safari.application.addEventListener("command", commandHandler, false);

commandHandler()函数中,我添加了一个alert语句用于调试目的。通过这样做,我发现每当我点击上下文菜单项时,函数commandHandler()都会触发两次。

此外,我添加了一个工具栏项,该项也会在点击时触发command()事件。附加到command()事件的功能在点击该项目后也会触发两次。

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

1 个答案:

答案 0 :(得分:4)

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

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

Apple provides guidance on how to handle this scenario,通过将命令绑定到特定目标或特定命令,这是您应该在此处执行的操作。如果不够,这里是additional documentation on how the callback system works to help you define your events properly

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