I use this wrapper to create, init, and fire all in one go.

function customEvent(el, name, data) {
        if(!el || !name) return null;
        if(!defined(data)) data = "";
        var evt = document.createEvent("MessageEvent");
        evt.initMessageEvent(name, true, false, data, window.location.href,
12, window);
        return el.dispatchEvent(evt);
        }

customEvent(document.getElementById("something"), "pageLoad");

Note that this is a pretty new feature and I've only tested it in
Firefox and Chrome.

On Mar 25, 7:33 am, solidox <[email protected]> wrote:
> First of all, thanks for the detailed answer. I hope I'm not pushing
> it if I ask how would I go about firing a custom
> event from AP. I'm not that good with events :(
>
> I uploaded the current working AP+Splash script and also the Splash
> script, in case anyone's interestedhttp://10megatons.com/zzztemp/greasemonkey/
>
> On Mar 25, 2:39 am, Fracture <[email protected]> wrote:
>
> > On Mar 24, 2:20 pm, esquifit <[email protected]> wrote:
>
> > > I don't know the inner workings of Autopagerize, but it could be that
> > > it is sufficient for it to run before the other script.
> > > In the Greasmonkey Manage Scripts dialog, just drag the Splash script
> > > back and drop it before Autopagerize.  The execution order is that of
> > > the list. It probably doesn't work, but it takes 5 seconds to test it,
> > > you never know.
>
> > > On Wed, Mar 24, 2010 at 1:44 PM, Fracture <[email protected]> wrote:
> > > > You would need to modify Splash so that it will scan for thumbnails
> > > > again after Autopagerize inserts another page.
>
> > > > One way to do this would be for Autopagerize to fire a custom message
> > > > event on the new page content once it loads, then have Splash listen
> > > > for that event and scan the new page when it happens. [1]
>
> > > > You could also listen for DOMSubtreeModified in Splash and try to
> > > > figure out when the event has been fired for a new page insertion. [2]
>
> > > > Unless Splash gives its functions to unsafeWindow for some reason, you
> > > > can't access them from Autopagerize.
>
> > > > [1]http://help.dottoro.com/ljknkjqd.php
> > > > [2]https://developer.mozilla.org/En/DOM_Events#Example
>
> > > > On Mar 24, 7:34 am, solidox <[email protected]> wrote:
> > > >> Hello,
>
> > > >> I'm trying to fix a script, in fact the interaction between 2 scripts:
> > > >> Autopagerize and Splash Album Viewer.
>
> > > >> I guess u know what Autopagerize is; Splash is just a full-size
> > > >> tooltip of the thumbnails on flickr (and other sites), so you don't
> > > >> have to load the whole page to see the larger image.
>
> > > >> The problem is Splash only works on the first page, because
> > > >> Autopagerize loads the next pages after Splash scans the DOM for
> > > >> thumbnails.
>
> > > >> I found what needs to call what, but since each script is sandboxed, I
> > > >> don't know how to access Splash's functions from Autopagerize.
>
> > > >> Hope you can help, thx
>
> > Since Autopagerize probably needs to fetch the next page with an
> > asynchronous request anyway, Splash will run only for the first page
> > no matter the order of execution.
>
> > > And since I'm going to modify both scripts, I could have Splash make
> > > it's function(s) public. I'm just not sure how to do that.
>
> > The custom message method would be the best way.  You fire a custom
> > event from AP when a new page is loaded and you set the event's target
> > to the element that's added to the page.  In Splash you add an event
> > listener for that custom event and "Splashify" the event target.
>
> > Another way to do it is, in Splash:
>
> > unsafeWindow.splashify = function(el) {...}
>
> > And then in AP:
>
> > ...
> > onload: function(details) {
> > ....
> > unsafeWindow.splashify(el);
> > ...
>
> > }
>
> > But this is very unsafe, as the name implies.  You're adding a
> > function to the page's context, so the page's scripts can access it.
> > Also, when calling the function, it's possible that the page overwrote
> > the old function and instead made you run something malicious.
>
> > The event passing method is better not only because it's safer, but
> > because you can better separate the implementation and the
> > "interface" (the event name, target, other properties).  Scripts don't
> > need to call functions in other scripts and worry about name or
> > parameter changes.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"greasemonkey-users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/greasemonkey-users?hl=en.

Reply via email to