VK wrote:[color=blue]
> VK wrote:[color=green]
> > -moz-binding: url(behavior.xml#KeyListener);
> > /* behavior: url() counterpair for IE left for you */[/color]
>
> said "a" say "b" :-)
>
> Here is the full code:
>
> // HTML
>
> <html>
> <head>
> <title>Behavior</title>
> <meta http-equiv="Content-Type"
> content="text/html; charset=iso-8859-1">
> <style type="text/css">
> body {
> font: 1em Verdana, sans-serif;
> color: #000000;
> background-color: #FFFFFF}
> form fieldset textarea {
> -moz-binding: url(behavior.xml#KeyListener);
> behavior: url(behavior.htc);
> font: 1em monotype;
> }
> </style>
> </head>
>
> <body[color=green]
> ><form action=""
> ><fieldset><legend>Demo</legend
> ><textarea name="ta001" cols="50" rows="5"></textarea><br
> ><textarea name="ta002" cols="50" rows="5"></textarea
> ></fieldset
> ></form
> ></body>[/color]
> </html>
>
>
> // behavior.xml (for Gecko)
> <?xml version="1.0"?>
> <bindings xmlns="http://www.mozilla.org/xbl">
> <binding id="KeyListener">
> <handlers type="text/javascript">
> <handler event="keypress" attachto="element">
> window.alert(event.which);
> </handler>
> </handlers>
> </binding>
> </bindings>
>
>
> // behavior.htc (for IE)
> <public:attach event="onkeypress" onevent="KeyListener()" />
> <script type="text/Jscript">
> function KeyListener() {
> window.alert(event.keyCode);
> }
> </script>
>
> As you can see Mozilla team decided to squeeze behaviors into
> pseudo-XML syntax, so the difference between bindings and behaviors may
> look spooky on the first look. But you can see that the difference is
> really in the used "envelope". Internally it is the same conventional
> scripting in both cases - lesser any worries about feature detection
> and fall back, because each block is guaranteed to be called by the
> intended UA.[/color]
This is fabulous VK, thanks for a very clear, working example.
I have just one issue with it, which is the same thing that bugs me
about IE's approach with the .htc files. I HATE extra files and extra
hits to the server. My immediate goal is to make this work with a
GreaseMonkey script, so it would be VERY useful to have everything in
one file. Unfortunately, I haven't been able to figure out how to make
your example work this way. The problem point is, I think, that '#' in
the url, which just smacks of poor spec design.
Here's what I thought to do: whether I use the CSS version or
document.addBinding(...), a url needs to be specified. So, I thought
to use data: protocol. If I take all the newlines and extra spaces out
of your behavior.xml file and put
data:text/xml,file_content_goes_here_without_trailing_hash_p art
into Firefox's location bar, then Firefox is happy with that. However,
this does not fly when I try to insert it into the style sheet.
Indeed, why should it? - the parser goes along reading characters
thinking it's got xml data and then *pow* it hits that invalid #
character. Somehow, it should know that it's got to the end of the
data section. Encoding the # as %23 did not help (nor did putting an
end of file, %19, before it). Same thing goes for trying it as
data:text/html
Evidently in version 2 of xbl, the # will not be required. See
http://www.mozilla.org/projects/xbl/...nterpretation1
vs. version 1 at:
http://www.mozilla.org/projects/xbl/xbl.html#attach-css
Can you think of any other approaches for a one file solution till
then?
Csaba