Okay, the real problem seemed to be that the message I send during the "activate" event from my global page to the injected script does arrive when I create a new Safari windows, but doesn't on any other situation. "safari.application.activeBrowserWindow.activeTab.page" seems to be filled during the activate event while creating a new window, but is cleared as soon as the topsites:// page is loaded. I implemented a check in the injected script to see if it's injected in a http(s) page or to resolve this problem.
So the activate event does fire everytime it should fire, only sending messages to a Topsite is only possible in the case that a new window is just opened and that was my problem.