<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"\@SimSun";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-GB link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>I’m not sure, but this doesn’t make sense:<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal>try { __flash__toXML(alert("destinationPage = null")) ; } catch (e) { "<undefined/>"; }<o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>because earlier in the code you pass a string to toXML(), here you / something is passing the alert function.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal style='margin-left:36.0pt'><b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> xerte-dev-bounces@lists.nottingham.ac.uk [mailto:xerte-dev-bounces@lists.nottingham.ac.uk] <b>On Behalf Of </b>Kemp Johnathan<br><b>Sent:</b> 18 April 2012 22:24<br><b>To:</b> Xerte Developers Discussion List<br><b>Subject:</b> [Xerte-dev] Reading url parameters in Xerte via javascript - strange behaviour in IE8<o:p></o:p></span></p></div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p><div><p class=MsoNormal style='margin-left:36.0pt'>Recently I have been working on opening up Xerte projects via a url which includes a parameter to specify which page to open the project at.<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>I have a javascript function which returns a url parameter, you pass the name of the parameter in the function call and it returns the value for the parameter if that parameter name has been included in the url.<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>When included in a html page it works reliably in IE8, Opera and Firefox.<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>However when I add the function to the end of rloObject.js and open the Xerte project with a url like the following (running a Xampp install of XOT)<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><a href="http://localhost/toolkits/play.php?template_id=20&pageID=bullet">http://localhost/toolkits/play.php?template_id=20&pageID=bullet</a><o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>and including in a script in the Xerte project the lines<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>destinationPage = callJS("myFunction","pageID");<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>callJS("alert"," destinationPage = " + destinationPage );<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>In Opera or Firefox I get an alert box that displays "destinationPage = bullet"<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>but in IE8 I get an alert box that displays " destinationPage = null"<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>If I use the Developer Tools in IE 8 and put a break point in my function I can watch the parameter be correctly gathered by the javascript function and returned.<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>The debugger then shows the next stage in the process as being back in the flash environment with the current line shown in yellow below<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>function __flash__escapeXML(<span style='background:#33FF33'>s</span>) {<br>return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");<br>}<br>function __flash__toXML(value) {<br><span style='background:#FFFF33'>var type = typeof(value);</span><br>if (type == "string") {<br>return "<string>" + __flash__escapeXML(value) + "</string>";<br>} else if (type == "undefined") {<br>return "<undefined/>";<br>} else if (type == "number") {<br>return "<number>" + value + "</number>";<br>} else if (value == null) {<br>return "<null/>";<br>} else if (type == "boolean") {<br>return value ? "<true/>" : "<false/>";<br>} else if (value instanceof Date) {<br>return "<date>" + value.getTime() + "</date>";<br>} else if (value instanceof Array) {<br>return __flash__arrayToXML(value);<br>} else if (type == "object") {<br>return __flash__objectToXML(value);<br>} else {<br>return "<null/>"; //???<br>}<br>}<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>If I set a watch on "<span style='background:yellow'>value</span>" it correctly displays in the watch with the value of the url parameter<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>i.e. if my url has &pageID=bullet, and I called my function with <o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>destinationPage = callJS("myFunction"."pageID");<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>then the watch shows "value" to be "bullet"<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>Since the type is a string the function  __flash__escapeXML(<span style='background:#33FF33'>s</span>) gets called.<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'> <o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>If I set a watch on <span style='background:#33FF33'>s</span> in this function then this also displays with the value of "bullet"<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>However when you step beyond the line<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;"); <o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>the debugger changes to display<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>try { __flash__toXML(alert("destinationPage = null")) ; } catch (e) { "<undefined/>"; }<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>I don't know if the functions revealed by the debugger are part of Xerte or part of the browser's flash player, but the problem appears to lie here in that somehow even though the javascript has been able to return the url parameter to the flash environment, the flash environment is then returning a value of "null".<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>If I can overcome this problem then it should be possible to call a XOT project via a url and open the project at a specific page in IE8, just as I now can if the project is opened in Firefox or Opera.<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>Can anyone with more knowledge of the Flash side of things cast any light on what is going wrong or how to fix this?<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>Kind regards<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>Johnathan<o:p></o:p></p></div><div><p class=MsoNormal style='margin-left:36.0pt'>  <o:p></o:p></p></div></div></body></html>