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 <[email protected]>
Date: Fri, May 8, 2009 at 4:54 PM
Subject: Re: MyFaces 2.0 PartialResponseWriter + EVALs
To: [email protected]
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