I have to evaluate that because generally the insertBefore did not trigger on all non IE browsers in the embedded case (Safari for instance failed as well, while Opera was working) so I had to embed our browser check code... Anyway the safe bet probably is to load the script synchronously via xhr and eval it manually in that case!
The unsafe bet is to have the browser doing this automatically.
Either way is fine with me since both methods are just a few lines of code.
My personal question was more along the lines if there are any obstacles
to add the eval behavior as described to the PartialResponseWriter, and how does facelets trigger the response writer in this regard.

(Facelets theorectically allows to use scripts just as plain html
thus we cannot use the startElement("script" approach in this case
unless facelets can map single tags into startElement calls)

Werner



Alexander Bell schrieb:
Hi,

I've tried the example. It works +1
So we can use document.createElement("script") for [3] and [4]

regards alex


2009/5/8 Ganesh <gan...@j4fry.org <mailto:gan...@j4fry.org>>

    It does work (even cross-browser). Try this:

    *<html>
    <body>
    <input type="submit" value="test" id="test">
    <script>//<!--

      var scriptTag = document.createElement("script");
      scriptTag.src="test.js";
      var item = document.getElementById('test');
      item.parentNode.insertBefore(scriptTag, item);
      //-->
    </script>
    </body>
    </html>

    with test.js having one line:
    alert('test');

    It's the DOM action that triggers the script execution.

    Best regards,
    Ganesh
    *
    Alexander Bell schrieb:

        Hi,

        I don't understand the solution for [3].
        I've got for instance the following tag on my page: <script
        type="text/javascript" src="http://my.source.com/myscript.js"; />.
        So we have to execute all the script code inside that file. Does
        this work with document.createElement("script")?
        Because this only create a DOM element but I'm not sure that the
        script-code is executed (especially in IE 5-6).

        regards alex

        2009/5/8 Ganesh <gan...@j4fry.org <mailto:gan...@j4fry.org>
        <mailto:gan...@j4fry.org <mailto:gan...@j4fry.org>>>


           Hi,

           There are four kinds of script constructs I can image may
        becoming
           pulled in through an ajax request:

           [1] component does startElement("script", component) ...
           endElement("script")
           [2] XHTML markup contains <script type="text/javascript"> ...
           </script> (or component writes this directly to the stream)
           [3] markup contains <h:outputSrcipt>
           [4] markup contains <script src=...>

           IMHO only [1] qualifies to be included in the <eval> section of
           the AJAX response by the PartialResponseWriter. Execution on the
           Javascript side can happen with
           window.execScript(theActualScriptContent) like Matthias proposed.
           Matthias, can you explain the advantages of this?

           [2] should be recognized by our embedded Javascript runScripts
           function which in fact also does window.execScript. Werner, I
           think we agree on this. Everything else would cause parsing
        of the
           XHTML markup.

           For [3] Werners document.createElement("script") approach can be
           suitable though I'm not sure how you want to send this down
        to the
           browser. Are you planning to run on the <extension> tag in the
           ajax XMLSchema?

           Werner, your example for document.createElement("script") was
           based on case [4]. But how do you want to do this? Are you
           planning to parse all the markup for script tags with src
           attributes? Maybe here an extension to our embedded Javascript
           runScripts function could make sense? This could also solve [3]!

           Best regards,
           Ganesh

           Werner Punz schrieb:

               Yes but then I have to fetch the script via xhr...
               which means more code on the javascript side of things!



               Werner



               Matthias Wessendorf schrieb:

                   isn't it better to do this in IE:
                   window.execScript(theActualScriptContent);

                   and in FF and other this:
                   window.eval(theActualScriptContent);

                   -Matthias

                   ---------- Forwarded message ----------
                   From: Werner Punz <werner.p...@gmail.com
        <mailto:werner.p...@gmail.com>
                   <mailto:werner.p...@gmail.com
        <mailto:werner.p...@gmail.com>>>
                   Date: Fri, May 8, 2009 at 4:54 PM
                   Subject: Re: MyFaces 2.0 PartialResponseWriter + EVALs
                   To: dev@myfaces.apache.org
        <mailto:dev@myfaces.apache.org> <mailto:dev@myfaces.apache.org
        <mailto:dev@myfaces.apache.org>>


                   Werner Punz schrieb:

                       Hello everyone:

                       I checked what has been done on the Partial Response
                       Writer for the Rendering. It is very basic, so I
        would
                       propose following enhancement.

                       Since we need separate eval blocks for
        javascripts, we
                       implement a PartialResponseWriterImpl which fetches
                       the scripts
                       from components and later allows those scripts to be
                       pushed into the eval part of the partial response.

                       There is a reason for that.

                       Although we have embedded javascript parsing in our
                       javascripts I would see that as optional feature for
                       badly behaving component sets.

                       The normal way for a component writer still is:
                       a) startElement("tagName", component)
                       b) writeAttribute...

                       write

                       c) endElement

                       The way Trinidad and others did it was simply to
        check
                       for scripts at startElement and push them into a
                       separate eval datastructure later to be processed (in
                       our case after the update part of the p
                       PartialResponse a separate eval stage has to be
        added)

                       I would start to work on this issue if it is ok with
                       anyone...
                       The entire functionality should be put into our
                       PartialResponseWriterImpl not into the API, and will
                       be hooked into

                       processPartial of PartialViewContextImpl

                       I am not sure how to deal with script src="..."
        on the
                       protocol and javascript level.

                       Werner




                   Ok here is my idea regarding sript src="....

                   I would transform that on the server side to a small
                   javascript ala
                   var scriptTag = document.createElement("script");
                   scriptTag.src="<src>"; document.body.append(scriptTag);
                   since the eval is executed after the rendering is done,
                   this should be
                   even safe on IE6!

                   That also would still mean that the update CDATA
        block is just
                   javascript only without any preprocessing which then can
                   be pushed
                   straight into the eval function!


                   Werner








-- Mit freundlichen Grüßen / Kind regards
        Alexander Bell

        J4Fry OpenSource Community
        Internet: http://www.j4fry.org
        E-Mail: alexander.b...@j4fry.org
        <mailto:alexander.b...@j4fry.org>
        <mailto:alexander.b...@j4fry.org <mailto:alexander.b...@j4fry.org>>

        Webprofil: http://www.j4fry.org/alexanderbell.shtml




--
Mit freundlichen Grüßen / Kind regards
Alexander Bell

J4Fry OpenSource Community
Internet: http://www.j4fry.org
E-Mail: alexander.b...@j4fry.org <mailto:alexander.b...@j4fry.org>
Webprofil: http://www.j4fry.org/alexanderbell.shtml


Reply via email to