2012-03-28 52 views
1

我開發了一個使用上下文菜單的Safari擴展。Safari擴展上下文菜單項命令事件觸發兩次

在代碼中,我正在聽使用上下文菜單項的命令事件:

safari.application.addEventListener("command", commandHandler, false); 

commandHandler()功能,我已經加入了調試目的的alert聲明。通過這樣做,我發現功能commandHandler()每次點擊上下文菜單項時都會觸發兩次。

此外,我添加了一個工具欄項目,它也點擊時觸發command()事件。點擊該項目後,附加到command()事件的功能也會啓動兩次。

有沒有人知道這個問題以及如何解決它?

回答

4

沒有更多的信息,這聽起來像一個過濾不足的問題。也就是說,您收到所有命令消息,而無需確定它們是哪些消息或爲什麼它們在您的回調層中流動,並且您的回調圖層每次點擊收到兩條消息(如給定的未知處置)。

Safari擴展的事件通知回調結構允許您針對相同的事件類型註冊多個事件,並且在很多情況下可能會生成多個不同的事件。爲此,您嘗試向「命令」範圍添加事件偵聽器意味着您實際上正在接收傳遞給回調層的所有命令。例如,如果您有複雜的嵌套關係(A包含B,其中A和B都通知)或複雜的行爲模式(例如,後接鼠標 )。

Apple provides guidance on how to handle this scenario,通過綁定命令到一個特定的目標或特定的命令,這是你應該在這裏做的。以防萬一,以下是additional documentation on how the callback system works to help you define your events properly

遵循指導應允許您通過將您的事件正確地綁定到您的對象並僅對您需要的事件進行操作來解決此問題。其他所有事情都應該被你的事件處理程序忽略。

+0

不是一個完美的答案,但讓我在正確的方向。謝謝。 – rdougan 2012-05-04 18:45:32

+0

@rdougan沒問題。樂意效勞! – MrGomez 2012-05-04 18:47:48