<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic JavaScript not being blocked/synched by Applet init() in Operating System - OpenVMS</title>
    <link>https://community.hpe.com/t5/operating-system-openvms/javascript-not-being-blocked-synched-by-applet-init/m-p/4416428#M42211</link>
    <description>Hi,&lt;BR /&gt;&lt;BR /&gt;Not sure how the following behaviour would pan-out on the VMS-available browsers, but I'd like to know if someone could please tell me.&lt;BR /&gt;&lt;BR /&gt;I've come up with a small reproducer (see below) that I hope will help&lt;BR /&gt;someone sched light on what's going on. (Also a related SDN Bug ID 6742814&lt;BR /&gt;may be of some help: -&lt;BR /&gt;&lt;A href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6742814" target="_blank"&gt;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6742814&lt;/A&gt; )&lt;BR /&gt;&lt;BR /&gt;In a nutshell with IE6 the Javascript resumes as soon as the init() method&lt;BR /&gt;has called JSObject.getWindow(this) but *before* the init() method has&lt;BR /&gt;completed/returned, as can be evidenced from the getNum() results. (Nice&lt;BR /&gt;trick!) Try it on FireFox to see the difference.&lt;BR /&gt;&lt;BR /&gt;Is this a new bug that was introduced when trying to fix a "freeze" with&lt;BR /&gt;JSObject.Call()? If not, how is one ever supposed to synchronize the&lt;BR /&gt;completion of Applet initialization? "Callbacks" a la mode de Adobe&lt;BR /&gt;FABridge?&lt;BR /&gt;&lt;BR /&gt;I'll do some more testing with other browsers/versions but surely this can't&lt;BR /&gt;be right? Possibly fixed in a later version of IE, JRE, or LiveConnect?&lt;BR /&gt;&lt;BR /&gt;To turn the Java console on on Windows: -&lt;BR /&gt;Tools-&amp;gt;Control Panel-&amp;gt;Java-&amp;gt;Advanced-&amp;gt;Show Java console&lt;BR /&gt;&lt;BR /&gt;Java Console output IE6&lt;BR /&gt;&lt;BR /&gt;[Alert box is "3"]&lt;BR /&gt;&lt;BR /&gt;in getNum 1&lt;BR /&gt;in getNum 2&lt;BR /&gt;in getNum 3&lt;BR /&gt;in getNum 4&lt;BR /&gt;Before sleep call&lt;BR /&gt;After sleep call&lt;BR /&gt;&lt;BR /&gt;Java Console output FF2 &lt;BR /&gt;&lt;BR /&gt;[Alert box is "36"]&lt;BR /&gt;&lt;BR /&gt;Before sleep call&lt;BR /&gt;After sleep call&lt;BR /&gt;in getNum 34&lt;BR /&gt;in getNum 35&lt;BR /&gt;in getNum 36&lt;BR /&gt;in getNum 37&lt;BR /&gt;&lt;BR /&gt;Cheers Richard Maher&lt;BR /&gt;&lt;BR /&gt;Sleeper.java&lt;BR /&gt;============&lt;BR /&gt;&lt;BR /&gt;import java.applet.Applet;&lt;BR /&gt;import netscape.javascript.JSObject;&lt;BR /&gt;import netscape.javascript.JSException;&lt;BR /&gt;import java.lang.InterruptedException;&lt;BR /&gt;&lt;BR /&gt;public class Sleeper extends Applet {&lt;BR /&gt;     private int myNum = 0;&lt;BR /&gt;     private JSObject browser;&lt;BR /&gt;&lt;BR /&gt;     public void init() {&lt;BR /&gt;        try {&lt;BR /&gt;            browser = JSObject.getWindow(this); }&lt;BR /&gt;        catch (netscape.javascript.JSException e) {&lt;BR /&gt;            e.printStackTrace(); }&lt;BR /&gt;        catch (Exception e) {&lt;BR /&gt;            e.printStackTrace(); }&lt;BR /&gt;&lt;BR /&gt;         System.out.println("Before sleep call");&lt;BR /&gt;         try {&lt;BR /&gt;             Thread.sleep(5000);&lt;BR /&gt;         }&lt;BR /&gt;         catch (InterruptedException e){&lt;BR /&gt;             e.printStackTrace();&lt;BR /&gt;         }&lt;BR /&gt;         System.out.println("After sleep call");&lt;BR /&gt;         myNum = 33;&lt;BR /&gt;     }&lt;BR /&gt;&lt;BR /&gt;     public int getNum(){&lt;BR /&gt;         int i = myNum++;&lt;BR /&gt;         System.out.println("in getNum " + myNum);&lt;BR /&gt;         return i;&lt;BR /&gt;     }&lt;BR /&gt;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;Sleeper.html&lt;BR /&gt;============&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;"&lt;A href="http://www.w3.org/TR/html4/loose.dtd" target="_blank"&gt;http://www.w3.org/TR/html4/loose.dtd&lt;/A&gt;"&amp;gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;  &amp;lt;meta name="author" content="Richard Maher" /&amp;gt;&lt;BR /&gt;  &amp;lt;meta name="description" content="JS Function and Applet Test" /&amp;gt;&lt;BR /&gt;&lt;BR /&gt;  &lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;    &lt;STYLE&gt;&amp;amp;lt;BR /&amp;amp;gt;&amp;amp;lt;BR /&amp;amp;gt;    body&amp;amp;lt;BR /&amp;amp;gt;    {&amp;amp;lt;BR /&amp;amp;gt;    margin: 0px;&amp;amp;lt;BR /&amp;amp;gt;    background-color: white;&amp;amp;lt;BR /&amp;amp;gt;    color: Black;&amp;amp;lt;BR /&amp;amp;gt;    font-family: times;&amp;amp;lt;BR /&amp;amp;gt;    font-size: 16px;&amp;amp;lt;BR /&amp;amp;gt;    border: medium ridge;&amp;amp;lt;BR /&amp;amp;gt;    }&amp;amp;lt;BR /&amp;amp;gt;&amp;amp;lt;BR /&amp;amp;gt;    &lt;/STYLE&gt;&lt;BR /&gt;&lt;BR /&gt;    &amp;lt;script type="text/javascript"&amp;gt;&lt;BR /&gt;&lt;BR /&gt;    function load() {&lt;BR /&gt;        var lclNum;&lt;BR /&gt;        var chan;&lt;BR /&gt;        try {&lt;BR /&gt;            chan = document.getElementById("Sleeper");&lt;BR /&gt;            lclNum = chan.getNum();&lt;BR /&gt;            lclNum = chan.getNum();&lt;BR /&gt;            lclNum = chan.getNum();&lt;BR /&gt;        }&lt;BR /&gt;        catch (err) {&lt;BR /&gt;            alert("In catch " + err.description);&lt;BR /&gt;        }&lt;BR /&gt;        if (chan == null) alert("chan is null");&lt;BR /&gt;        alert(chan.getNum());&lt;BR /&gt;    }&lt;BR /&gt;&lt;BR /&gt;    &amp;lt;/script&amp;gt;&lt;BR /&gt;&lt;BR /&gt;  &lt;BR /&gt;&lt;BR /&gt;  &lt;BR /&gt;&lt;BR /&gt;    &lt;BR /&gt;&lt;H2&gt;Test it&lt;/H2&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;    &lt;FORM name="display" style="margin-left: 100px;"&gt;&lt;BR /&gt;&lt;BR /&gt;       &lt;INPUT /&gt;          type="text"&lt;BR /&gt;          style="text-align: Left;"&lt;BR /&gt;          name="next"&lt;BR /&gt;          size=10&lt;BR /&gt;       /&amp;gt;&lt;BR /&gt;    &lt;/FORM&gt;&lt;BR /&gt;&lt;BR /&gt;    &amp;lt;script type="text/javascript"&amp;gt;&lt;BR /&gt;&lt;BR /&gt;    var myDef;&lt;BR /&gt;    if (navigator.appName == "Microsoft Internet Explorer")&lt;BR /&gt;       myDef =&lt;BR /&gt;          '&lt;OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"&gt;                   'width= "0" height= "0" id="Sleeper"&amp;gt;'&lt;BR /&gt;+&lt;BR /&gt;                            '&lt;PARAM name="code" value="Sleeper" /&gt;'&lt;BR /&gt;+&lt;BR /&gt;                            '&lt;PARAM name="mayscript" value="true" /&gt;'     +&lt;BR /&gt;                            '&lt;PARAM name="scriptable" value="true" /&gt;'     +&lt;BR /&gt;          '&lt;/OBJECT&gt;'&lt;BR /&gt;    else&lt;BR /&gt;       myDef =&lt;BR /&gt;          '&lt;OBJECT classid="java:Sleeper.class"&gt;+&lt;BR /&gt;                   'type="application/x-java-applet" '   +&lt;BR /&gt;                   'width= "0" height= "0" id="Sleeper"&amp;gt;'&lt;BR /&gt;+&lt;BR /&gt;                            '&lt;PARAM name="code" value="Sleeper" /&gt;'&lt;BR /&gt;+&lt;BR /&gt;                            '&lt;PARAM name="mayscript" value="true" /&gt;'     +&lt;BR /&gt;                            '&lt;PARAM name="scriptable" value="true" /&gt;'     +&lt;BR /&gt;          '&lt;/OBJECT&gt;'&lt;BR /&gt;&lt;BR /&gt;    document.write(myDef);&lt;BR /&gt;    &amp;lt;/script&amp;gt;&lt;BR /&gt;&lt;BR /&gt;  &lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;"Richard Maher" &lt;MAHER_RJ&gt; wrote in message&lt;BR /&gt;news:gsmp8k$hfo$1@news-01.bur.connect.com.au...&lt;BR /&gt;&amp;gt; Hi,&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; I'm probably seeing-things again but here goes: -&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; IE6 with JRE 1.6.0_12 looks to continue the Javascript processing while my&lt;BR /&gt;&amp;gt; Applet.init() has yet to return. FireFox is fine and when I went for a&lt;BR /&gt;small&lt;BR /&gt;&amp;gt; reproducer IE also performed as expected. (Both with Applet appended in a&lt;BR /&gt;&amp;gt; &lt;DIV&gt; or document.writeN() as an &lt;OBJECT&gt; in the body)&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; See below for a reasonable code snippet, but the critical bit is this: -&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     var tier3Chan;&lt;BR /&gt;&amp;gt;     try {&lt;BR /&gt;&amp;gt;         document.body.appendChild(appletDiv);&lt;BR /&gt;&amp;gt;         tier3Chan = document.getElementById(appletId);&lt;BR /&gt;&amp;gt;         alert("Auth = " + tier3Chan.getThree());&lt;BR /&gt;&amp;gt;         var userAuthorized = tier3Chan.isAuthorized();&lt;BR /&gt;&amp;gt;     }&lt;BR /&gt;&amp;gt;     catch(err) {&lt;BR /&gt;&amp;gt;         alert("Err =" + err.description);&lt;BR /&gt;&amp;gt;         tier3Chan = null;&lt;BR /&gt;&amp;gt;     };&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; If I take out that 'alert("Auth =' bit then isAuthorised() gets called and&lt;BR /&gt;&amp;gt; returns false even though the user hasn't had a chance to enter their&lt;BR /&gt;&amp;gt; Username/Password yet. (Pop-up dialog currently sitting on the screen)&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; I understand when it would be valid to let the JS run past the&lt;BR /&gt;&amp;gt; getElementById so I normally stick a method call (such as isAuthorized())&lt;BR /&gt;in&lt;BR /&gt;&amp;gt; their to force the block-for-init but this time it doesn't seem to work&lt;BR /&gt;:-(&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; For a similar setup please see: -&lt;BR /&gt;&amp;gt; &lt;A href="http://manson.vistech.net/t3$examples/demo_client_flex.html" target="_blank"&gt;http://manson.vistech.net/t3$examples/demo_client_flex.html&lt;/A&gt;&lt;BR /&gt;&amp;gt; Username: TIER3_DEMO&lt;BR /&gt;&amp;gt; Password: QUEUE&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; All (slightly dated) Java/Javascript/HTML source code is at: -&lt;BR /&gt;&amp;gt; &lt;A href="http://manson.vistech.net/t3$examples/" target="_blank"&gt;http://manson.vistech.net/t3$examples/&lt;/A&gt;&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; Unfortunately that example works but the one below doesn't :-(&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; Anyone know the mechanics behind what Javascript is looking for on IE to&lt;BR /&gt;&amp;gt; tell it that the Applet has finished init()ing? Or how I might be stomping&lt;BR /&gt;&amp;gt; on it? (Or at least failing to flag it?)&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; Cheers Richard Maher&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; /**&lt;BR /&gt;&amp;gt;  *  Copyright (c) Richard Maher. All rights reserved.&lt;BR /&gt;&amp;gt;  */&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; function Tier3Client(application,&lt;BR /&gt;&amp;gt;                      codeBase,&lt;BR /&gt;&amp;gt;                      port,&lt;BR /&gt;&amp;gt;                      maxBuf,&lt;BR /&gt;&amp;gt;                      hostCharSet,&lt;BR /&gt;&amp;gt;                      sslReqd)&lt;BR /&gt;&amp;gt; {&lt;BR /&gt;&amp;gt;     this.application = application;&lt;BR /&gt;&amp;gt;     this.codeBase    = codeBase;&lt;BR /&gt;&amp;gt;     this.port        = port;&lt;BR /&gt;&amp;gt;     this.maxBuf      = maxBuf;&lt;BR /&gt;&amp;gt;     this.hostCharSet = hostCharSet;&lt;BR /&gt;&amp;gt;     this.sslReqd     = sslReqd;&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     var appletId = "Tier3__" + application + "_Applet";&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     try {&lt;BR /&gt;&amp;gt;         var idTaken = document.getElementById(appletId);&lt;BR /&gt;&amp;gt;     }&lt;BR /&gt;&amp;gt;     catch (err) {};&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     if (idTaken != null) {&lt;BR /&gt;&amp;gt;         throw new Error("Tier3 Client already registered for " +&lt;BR /&gt;&amp;gt; this.application);&lt;BR /&gt;&amp;gt;         return;&lt;BR /&gt;&amp;gt;     }&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     var archiveName = "tier3Client.jar";&lt;BR /&gt;&amp;gt;     var className   = "tier3Client/Tier3Application";&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     var appletParams = [{"name":"archive",     "value":archiveName},&lt;BR /&gt;&amp;gt;                         {"name":"codebase",    "value":codeBase   },&lt;BR /&gt;&amp;gt;                         {"name":"code",        "value":className  },&lt;BR /&gt;&amp;gt;                         {"name":"mayscript",   "value":"true"     },&lt;BR /&gt;&amp;gt;                         {"name":"scriptable",  "value":"true"     },&lt;BR /&gt;&amp;gt;                         {"name":"APPLICATION", "value":application},&lt;BR /&gt;&amp;gt;                         {"name":"PORT",        "value":port       },&lt;BR /&gt;&amp;gt;                         {"name":"MAXBUF",      "value":maxBuf     },&lt;BR /&gt;&amp;gt;                         {"name":"HOSTCHARSET", "value":hostCharSet},&lt;BR /&gt;&amp;gt;                         {"name":"SSLREQD",     "value":sslReqd    }];&lt;BR /&gt;&amp;gt;     var startParam = 0;&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     var objectTag = "&lt;OBJECT classid=";&amp;lt;BR /&amp;gt;&amp;gt;&amp;lt;BR /&amp;gt;&amp;gt;     if (/Internet Explorer/.test(navigator.appName)) {&amp;lt;BR /&amp;gt;&amp;gt;         objectTag = objectTag +&amp;lt;BR /&amp;gt;&amp;gt;             '" 8ad9c840-044e-11d1-b3e9-00805f499d93=""&gt;&amp;gt;     } else {&lt;BR /&gt;&amp;gt;         objectTag = objectTag +&lt;BR /&gt;&amp;gt;             '"java:' + className + '.class"&lt;BR /&gt;type="application/x-java-applet&lt;BR /&gt;&amp;gt; " ' +&lt;BR /&gt;&amp;gt;             'archive="' + codeBase + archiveName + '"';&lt;BR /&gt;&amp;gt;         startParam = 1;&lt;BR /&gt;&amp;gt;     }&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     objectTag = objectTag + ' width= "0" height= "0" id="' + appletId +&lt;BR /&gt;&amp;gt; '"&amp;gt;';&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     for (i=startParam; i&lt;APPLETPARAMS.LENGTH&gt;&lt;/APPLETPARAMS.LENGTH&gt;&amp;gt;         objectTag = objectTag + '&lt;PARAM name="' + appletParams[i].name&amp;lt;BR /&amp;gt;+&amp;lt;BR /&amp;gt;&amp;gt; '" /&gt;&amp;gt;                                        'value ="' + appletParams[i].value&lt;BR /&gt;+&lt;BR /&gt;&amp;gt; '"&amp;gt;';&lt;BR /&gt;&amp;gt;     }&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     objectTag = objectTag + "&lt;/OBJECT&gt;";&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     var appletDiv = document.createElement("div");&lt;BR /&gt;&amp;gt;     appletDiv.innerHTML = objectTag;&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     var tier3Chan;&lt;BR /&gt;&amp;gt;     try {&lt;BR /&gt;&amp;gt;         document.body.appendChild(appletDiv);&lt;BR /&gt;&amp;gt;         tier3Chan = document.getElementById(appletId);&lt;BR /&gt;&amp;gt;         alert("Auth = " + tier3Chan.getThree());&lt;BR /&gt;&amp;gt;         var userAuthorized = tier3Chan.isAuthorized();&lt;BR /&gt;&amp;gt;     }&lt;BR /&gt;&amp;gt;     catch(err) {&lt;BR /&gt;&amp;gt;         alert("Err =" + err.description);&lt;BR /&gt;&amp;gt;         tier3Chan = null;&lt;BR /&gt;&amp;gt;     };&lt;BR /&gt;&amp;gt;     alert("After check");&lt;BR /&gt;&amp;gt;     if (tier3Chan == null) {&lt;BR /&gt;&amp;gt;         throw new Error("Tier3 was unable to initialize the applet for " +&lt;BR /&gt;&amp;gt; this.application);&lt;BR /&gt;&amp;gt;         return;&lt;BR /&gt;&amp;gt;     } else {&lt;BR /&gt;&amp;gt;         if (!userAuthorized) {&lt;BR /&gt;&amp;gt;             throw new Error("Tier3 User authentication unsuccessful for "&lt;BR /&gt;+&lt;BR /&gt;&amp;gt; this.application);&lt;BR /&gt;&amp;gt;             return;&lt;BR /&gt;&amp;gt;         }&lt;BR /&gt;&amp;gt;     }&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     this.chan = tier3Chan;&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     Tier3Client.applications[this.application] = this;&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     return this;&lt;BR /&gt;&amp;gt; }&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&lt;/OBJECT&gt;&lt;/DIV&gt;&lt;/MAHER_RJ&gt;</description>
    <pubDate>Sat, 09 May 2009 05:19:36 GMT</pubDate>
    <dc:creator>Richard J Maher</dc:creator>
    <dc:date>2009-05-09T05:19:36Z</dc:date>
    <item>
      <title>JavaScript not being blocked/synched by Applet init()</title>
      <link>https://community.hpe.com/t5/operating-system-openvms/javascript-not-being-blocked-synched-by-applet-init/m-p/4416428#M42211</link>
      <description>Hi,&lt;BR /&gt;&lt;BR /&gt;Not sure how the following behaviour would pan-out on the VMS-available browsers, but I'd like to know if someone could please tell me.&lt;BR /&gt;&lt;BR /&gt;I've come up with a small reproducer (see below) that I hope will help&lt;BR /&gt;someone sched light on what's going on. (Also a related SDN Bug ID 6742814&lt;BR /&gt;may be of some help: -&lt;BR /&gt;&lt;A href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6742814" target="_blank"&gt;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6742814&lt;/A&gt; )&lt;BR /&gt;&lt;BR /&gt;In a nutshell with IE6 the Javascript resumes as soon as the init() method&lt;BR /&gt;has called JSObject.getWindow(this) but *before* the init() method has&lt;BR /&gt;completed/returned, as can be evidenced from the getNum() results. (Nice&lt;BR /&gt;trick!) Try it on FireFox to see the difference.&lt;BR /&gt;&lt;BR /&gt;Is this a new bug that was introduced when trying to fix a "freeze" with&lt;BR /&gt;JSObject.Call()? If not, how is one ever supposed to synchronize the&lt;BR /&gt;completion of Applet initialization? "Callbacks" a la mode de Adobe&lt;BR /&gt;FABridge?&lt;BR /&gt;&lt;BR /&gt;I'll do some more testing with other browsers/versions but surely this can't&lt;BR /&gt;be right? Possibly fixed in a later version of IE, JRE, or LiveConnect?&lt;BR /&gt;&lt;BR /&gt;To turn the Java console on on Windows: -&lt;BR /&gt;Tools-&amp;gt;Control Panel-&amp;gt;Java-&amp;gt;Advanced-&amp;gt;Show Java console&lt;BR /&gt;&lt;BR /&gt;Java Console output IE6&lt;BR /&gt;&lt;BR /&gt;[Alert box is "3"]&lt;BR /&gt;&lt;BR /&gt;in getNum 1&lt;BR /&gt;in getNum 2&lt;BR /&gt;in getNum 3&lt;BR /&gt;in getNum 4&lt;BR /&gt;Before sleep call&lt;BR /&gt;After sleep call&lt;BR /&gt;&lt;BR /&gt;Java Console output FF2 &lt;BR /&gt;&lt;BR /&gt;[Alert box is "36"]&lt;BR /&gt;&lt;BR /&gt;Before sleep call&lt;BR /&gt;After sleep call&lt;BR /&gt;in getNum 34&lt;BR /&gt;in getNum 35&lt;BR /&gt;in getNum 36&lt;BR /&gt;in getNum 37&lt;BR /&gt;&lt;BR /&gt;Cheers Richard Maher&lt;BR /&gt;&lt;BR /&gt;Sleeper.java&lt;BR /&gt;============&lt;BR /&gt;&lt;BR /&gt;import java.applet.Applet;&lt;BR /&gt;import netscape.javascript.JSObject;&lt;BR /&gt;import netscape.javascript.JSException;&lt;BR /&gt;import java.lang.InterruptedException;&lt;BR /&gt;&lt;BR /&gt;public class Sleeper extends Applet {&lt;BR /&gt;     private int myNum = 0;&lt;BR /&gt;     private JSObject browser;&lt;BR /&gt;&lt;BR /&gt;     public void init() {&lt;BR /&gt;        try {&lt;BR /&gt;            browser = JSObject.getWindow(this); }&lt;BR /&gt;        catch (netscape.javascript.JSException e) {&lt;BR /&gt;            e.printStackTrace(); }&lt;BR /&gt;        catch (Exception e) {&lt;BR /&gt;            e.printStackTrace(); }&lt;BR /&gt;&lt;BR /&gt;         System.out.println("Before sleep call");&lt;BR /&gt;         try {&lt;BR /&gt;             Thread.sleep(5000);&lt;BR /&gt;         }&lt;BR /&gt;         catch (InterruptedException e){&lt;BR /&gt;             e.printStackTrace();&lt;BR /&gt;         }&lt;BR /&gt;         System.out.println("After sleep call");&lt;BR /&gt;         myNum = 33;&lt;BR /&gt;     }&lt;BR /&gt;&lt;BR /&gt;     public int getNum(){&lt;BR /&gt;         int i = myNum++;&lt;BR /&gt;         System.out.println("in getNum " + myNum);&lt;BR /&gt;         return i;&lt;BR /&gt;     }&lt;BR /&gt;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;Sleeper.html&lt;BR /&gt;============&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;"&lt;A href="http://www.w3.org/TR/html4/loose.dtd" target="_blank"&gt;http://www.w3.org/TR/html4/loose.dtd&lt;/A&gt;"&amp;gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;  &amp;lt;meta name="author" content="Richard Maher" /&amp;gt;&lt;BR /&gt;  &amp;lt;meta name="description" content="JS Function and Applet Test" /&amp;gt;&lt;BR /&gt;&lt;BR /&gt;  &lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;    &lt;STYLE&gt;&amp;amp;lt;BR /&amp;amp;gt;&amp;amp;lt;BR /&amp;amp;gt;    body&amp;amp;lt;BR /&amp;amp;gt;    {&amp;amp;lt;BR /&amp;amp;gt;    margin: 0px;&amp;amp;lt;BR /&amp;amp;gt;    background-color: white;&amp;amp;lt;BR /&amp;amp;gt;    color: Black;&amp;amp;lt;BR /&amp;amp;gt;    font-family: times;&amp;amp;lt;BR /&amp;amp;gt;    font-size: 16px;&amp;amp;lt;BR /&amp;amp;gt;    border: medium ridge;&amp;amp;lt;BR /&amp;amp;gt;    }&amp;amp;lt;BR /&amp;amp;gt;&amp;amp;lt;BR /&amp;amp;gt;    &lt;/STYLE&gt;&lt;BR /&gt;&lt;BR /&gt;    &amp;lt;script type="text/javascript"&amp;gt;&lt;BR /&gt;&lt;BR /&gt;    function load() {&lt;BR /&gt;        var lclNum;&lt;BR /&gt;        var chan;&lt;BR /&gt;        try {&lt;BR /&gt;            chan = document.getElementById("Sleeper");&lt;BR /&gt;            lclNum = chan.getNum();&lt;BR /&gt;            lclNum = chan.getNum();&lt;BR /&gt;            lclNum = chan.getNum();&lt;BR /&gt;        }&lt;BR /&gt;        catch (err) {&lt;BR /&gt;            alert("In catch " + err.description);&lt;BR /&gt;        }&lt;BR /&gt;        if (chan == null) alert("chan is null");&lt;BR /&gt;        alert(chan.getNum());&lt;BR /&gt;    }&lt;BR /&gt;&lt;BR /&gt;    &amp;lt;/script&amp;gt;&lt;BR /&gt;&lt;BR /&gt;  &lt;BR /&gt;&lt;BR /&gt;  &lt;BR /&gt;&lt;BR /&gt;    &lt;BR /&gt;&lt;H2&gt;Test it&lt;/H2&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;    &lt;FORM name="display" style="margin-left: 100px;"&gt;&lt;BR /&gt;&lt;BR /&gt;       &lt;INPUT /&gt;          type="text"&lt;BR /&gt;          style="text-align: Left;"&lt;BR /&gt;          name="next"&lt;BR /&gt;          size=10&lt;BR /&gt;       /&amp;gt;&lt;BR /&gt;    &lt;/FORM&gt;&lt;BR /&gt;&lt;BR /&gt;    &amp;lt;script type="text/javascript"&amp;gt;&lt;BR /&gt;&lt;BR /&gt;    var myDef;&lt;BR /&gt;    if (navigator.appName == "Microsoft Internet Explorer")&lt;BR /&gt;       myDef =&lt;BR /&gt;          '&lt;OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"&gt;                   'width= "0" height= "0" id="Sleeper"&amp;gt;'&lt;BR /&gt;+&lt;BR /&gt;                            '&lt;PARAM name="code" value="Sleeper" /&gt;'&lt;BR /&gt;+&lt;BR /&gt;                            '&lt;PARAM name="mayscript" value="true" /&gt;'     +&lt;BR /&gt;                            '&lt;PARAM name="scriptable" value="true" /&gt;'     +&lt;BR /&gt;          '&lt;/OBJECT&gt;'&lt;BR /&gt;    else&lt;BR /&gt;       myDef =&lt;BR /&gt;          '&lt;OBJECT classid="java:Sleeper.class"&gt;+&lt;BR /&gt;                   'type="application/x-java-applet" '   +&lt;BR /&gt;                   'width= "0" height= "0" id="Sleeper"&amp;gt;'&lt;BR /&gt;+&lt;BR /&gt;                            '&lt;PARAM name="code" value="Sleeper" /&gt;'&lt;BR /&gt;+&lt;BR /&gt;                            '&lt;PARAM name="mayscript" value="true" /&gt;'     +&lt;BR /&gt;                            '&lt;PARAM name="scriptable" value="true" /&gt;'     +&lt;BR /&gt;          '&lt;/OBJECT&gt;'&lt;BR /&gt;&lt;BR /&gt;    document.write(myDef);&lt;BR /&gt;    &amp;lt;/script&amp;gt;&lt;BR /&gt;&lt;BR /&gt;  &lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;"Richard Maher" &lt;MAHER_RJ&gt; wrote in message&lt;BR /&gt;news:gsmp8k$hfo$1@news-01.bur.connect.com.au...&lt;BR /&gt;&amp;gt; Hi,&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; I'm probably seeing-things again but here goes: -&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; IE6 with JRE 1.6.0_12 looks to continue the Javascript processing while my&lt;BR /&gt;&amp;gt; Applet.init() has yet to return. FireFox is fine and when I went for a&lt;BR /&gt;small&lt;BR /&gt;&amp;gt; reproducer IE also performed as expected. (Both with Applet appended in a&lt;BR /&gt;&amp;gt; &lt;DIV&gt; or document.writeN() as an &lt;OBJECT&gt; in the body)&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; See below for a reasonable code snippet, but the critical bit is this: -&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     var tier3Chan;&lt;BR /&gt;&amp;gt;     try {&lt;BR /&gt;&amp;gt;         document.body.appendChild(appletDiv);&lt;BR /&gt;&amp;gt;         tier3Chan = document.getElementById(appletId);&lt;BR /&gt;&amp;gt;         alert("Auth = " + tier3Chan.getThree());&lt;BR /&gt;&amp;gt;         var userAuthorized = tier3Chan.isAuthorized();&lt;BR /&gt;&amp;gt;     }&lt;BR /&gt;&amp;gt;     catch(err) {&lt;BR /&gt;&amp;gt;         alert("Err =" + err.description);&lt;BR /&gt;&amp;gt;         tier3Chan = null;&lt;BR /&gt;&amp;gt;     };&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; If I take out that 'alert("Auth =' bit then isAuthorised() gets called and&lt;BR /&gt;&amp;gt; returns false even though the user hasn't had a chance to enter their&lt;BR /&gt;&amp;gt; Username/Password yet. (Pop-up dialog currently sitting on the screen)&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; I understand when it would be valid to let the JS run past the&lt;BR /&gt;&amp;gt; getElementById so I normally stick a method call (such as isAuthorized())&lt;BR /&gt;in&lt;BR /&gt;&amp;gt; their to force the block-for-init but this time it doesn't seem to work&lt;BR /&gt;:-(&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; For a similar setup please see: -&lt;BR /&gt;&amp;gt; &lt;A href="http://manson.vistech.net/t3$examples/demo_client_flex.html" target="_blank"&gt;http://manson.vistech.net/t3$examples/demo_client_flex.html&lt;/A&gt;&lt;BR /&gt;&amp;gt; Username: TIER3_DEMO&lt;BR /&gt;&amp;gt; Password: QUEUE&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; All (slightly dated) Java/Javascript/HTML source code is at: -&lt;BR /&gt;&amp;gt; &lt;A href="http://manson.vistech.net/t3$examples/" target="_blank"&gt;http://manson.vistech.net/t3$examples/&lt;/A&gt;&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; Unfortunately that example works but the one below doesn't :-(&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; Anyone know the mechanics behind what Javascript is looking for on IE to&lt;BR /&gt;&amp;gt; tell it that the Applet has finished init()ing? Or how I might be stomping&lt;BR /&gt;&amp;gt; on it? (Or at least failing to flag it?)&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; Cheers Richard Maher&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; /**&lt;BR /&gt;&amp;gt;  *  Copyright (c) Richard Maher. All rights reserved.&lt;BR /&gt;&amp;gt;  */&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt; function Tier3Client(application,&lt;BR /&gt;&amp;gt;                      codeBase,&lt;BR /&gt;&amp;gt;                      port,&lt;BR /&gt;&amp;gt;                      maxBuf,&lt;BR /&gt;&amp;gt;                      hostCharSet,&lt;BR /&gt;&amp;gt;                      sslReqd)&lt;BR /&gt;&amp;gt; {&lt;BR /&gt;&amp;gt;     this.application = application;&lt;BR /&gt;&amp;gt;     this.codeBase    = codeBase;&lt;BR /&gt;&amp;gt;     this.port        = port;&lt;BR /&gt;&amp;gt;     this.maxBuf      = maxBuf;&lt;BR /&gt;&amp;gt;     this.hostCharSet = hostCharSet;&lt;BR /&gt;&amp;gt;     this.sslReqd     = sslReqd;&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     var appletId = "Tier3__" + application + "_Applet";&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     try {&lt;BR /&gt;&amp;gt;         var idTaken = document.getElementById(appletId);&lt;BR /&gt;&amp;gt;     }&lt;BR /&gt;&amp;gt;     catch (err) {};&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     if (idTaken != null) {&lt;BR /&gt;&amp;gt;         throw new Error("Tier3 Client already registered for " +&lt;BR /&gt;&amp;gt; this.application);&lt;BR /&gt;&amp;gt;         return;&lt;BR /&gt;&amp;gt;     }&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     var archiveName = "tier3Client.jar";&lt;BR /&gt;&amp;gt;     var className   = "tier3Client/Tier3Application";&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     var appletParams = [{"name":"archive",     "value":archiveName},&lt;BR /&gt;&amp;gt;                         {"name":"codebase",    "value":codeBase   },&lt;BR /&gt;&amp;gt;                         {"name":"code",        "value":className  },&lt;BR /&gt;&amp;gt;                         {"name":"mayscript",   "value":"true"     },&lt;BR /&gt;&amp;gt;                         {"name":"scriptable",  "value":"true"     },&lt;BR /&gt;&amp;gt;                         {"name":"APPLICATION", "value":application},&lt;BR /&gt;&amp;gt;                         {"name":"PORT",        "value":port       },&lt;BR /&gt;&amp;gt;                         {"name":"MAXBUF",      "value":maxBuf     },&lt;BR /&gt;&amp;gt;                         {"name":"HOSTCHARSET", "value":hostCharSet},&lt;BR /&gt;&amp;gt;                         {"name":"SSLREQD",     "value":sslReqd    }];&lt;BR /&gt;&amp;gt;     var startParam = 0;&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     var objectTag = "&lt;OBJECT classid=";&amp;lt;BR /&amp;gt;&amp;gt;&amp;lt;BR /&amp;gt;&amp;gt;     if (/Internet Explorer/.test(navigator.appName)) {&amp;lt;BR /&amp;gt;&amp;gt;         objectTag = objectTag +&amp;lt;BR /&amp;gt;&amp;gt;             '" 8ad9c840-044e-11d1-b3e9-00805f499d93=""&gt;&amp;gt;     } else {&lt;BR /&gt;&amp;gt;         objectTag = objectTag +&lt;BR /&gt;&amp;gt;             '"java:' + className + '.class"&lt;BR /&gt;type="application/x-java-applet&lt;BR /&gt;&amp;gt; " ' +&lt;BR /&gt;&amp;gt;             'archive="' + codeBase + archiveName + '"';&lt;BR /&gt;&amp;gt;         startParam = 1;&lt;BR /&gt;&amp;gt;     }&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     objectTag = objectTag + ' width= "0" height= "0" id="' + appletId +&lt;BR /&gt;&amp;gt; '"&amp;gt;';&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     for (i=startParam; i&lt;APPLETPARAMS.LENGTH&gt;&lt;/APPLETPARAMS.LENGTH&gt;&amp;gt;         objectTag = objectTag + '&lt;PARAM name="' + appletParams[i].name&amp;lt;BR /&amp;gt;+&amp;lt;BR /&amp;gt;&amp;gt; '" /&gt;&amp;gt;                                        'value ="' + appletParams[i].value&lt;BR /&gt;+&lt;BR /&gt;&amp;gt; '"&amp;gt;';&lt;BR /&gt;&amp;gt;     }&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     objectTag = objectTag + "&lt;/OBJECT&gt;";&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     var appletDiv = document.createElement("div");&lt;BR /&gt;&amp;gt;     appletDiv.innerHTML = objectTag;&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     var tier3Chan;&lt;BR /&gt;&amp;gt;     try {&lt;BR /&gt;&amp;gt;         document.body.appendChild(appletDiv);&lt;BR /&gt;&amp;gt;         tier3Chan = document.getElementById(appletId);&lt;BR /&gt;&amp;gt;         alert("Auth = " + tier3Chan.getThree());&lt;BR /&gt;&amp;gt;         var userAuthorized = tier3Chan.isAuthorized();&lt;BR /&gt;&amp;gt;     }&lt;BR /&gt;&amp;gt;     catch(err) {&lt;BR /&gt;&amp;gt;         alert("Err =" + err.description);&lt;BR /&gt;&amp;gt;         tier3Chan = null;&lt;BR /&gt;&amp;gt;     };&lt;BR /&gt;&amp;gt;     alert("After check");&lt;BR /&gt;&amp;gt;     if (tier3Chan == null) {&lt;BR /&gt;&amp;gt;         throw new Error("Tier3 was unable to initialize the applet for " +&lt;BR /&gt;&amp;gt; this.application);&lt;BR /&gt;&amp;gt;         return;&lt;BR /&gt;&amp;gt;     } else {&lt;BR /&gt;&amp;gt;         if (!userAuthorized) {&lt;BR /&gt;&amp;gt;             throw new Error("Tier3 User authentication unsuccessful for "&lt;BR /&gt;+&lt;BR /&gt;&amp;gt; this.application);&lt;BR /&gt;&amp;gt;             return;&lt;BR /&gt;&amp;gt;         }&lt;BR /&gt;&amp;gt;     }&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     this.chan = tier3Chan;&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     Tier3Client.applications[this.application] = this;&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;     return this;&lt;BR /&gt;&amp;gt; }&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&amp;gt;&lt;BR /&gt;&lt;/OBJECT&gt;&lt;/DIV&gt;&lt;/MAHER_RJ&gt;</description>
      <pubDate>Sat, 09 May 2009 05:19:36 GMT</pubDate>
      <guid>https://community.hpe.com/t5/operating-system-openvms/javascript-not-being-blocked-synched-by-applet-init/m-p/4416428#M42211</guid>
      <dc:creator>Richard J Maher</dc:creator>
      <dc:date>2009-05-09T05:19:36Z</dc:date>
    </item>
    <item>
      <title>Re: JavaScript not being blocked/synched by Applet init()</title>
      <link>https://community.hpe.com/t5/operating-system-openvms/javascript-not-being-blocked-synched-by-applet-init/m-p/4416429#M42212</link>
      <description>Upon re-reading that bug report I quoted, I've come to the conclusion that (for whatever compelling reasons) it was a deliberate break of upward-compatibility and the laws of browser-physics as we knew them pre-Java6. (Java 1.4 and I'm guessing 5 behave "as expected" with IE6)&lt;BR /&gt;&lt;BR /&gt;A couple of relevant-sounding quotes from that bug report from Sept last&lt;BR /&gt;year: -&lt;BR /&gt;{&lt;BR /&gt;The rules for initiating JavaScript-to-Java and Java-to-JavaScript&lt;BR /&gt;calls (which will be formalized in the forthcoming new LiveConnect&lt;BR /&gt;specification) are:&lt;BR /&gt;&lt;BR /&gt;  - JavaScript-to-Java calls against a given applet block until that&lt;BR /&gt;    applet has completed init(), or&lt;BR /&gt;&lt;BR /&gt;  - that applet initiates a Java-to-JavaScript call in init().&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;The definition of "initiates a Java-to-JavaScript" in that last line appears&lt;BR /&gt;to have been further  broadened and amplified to include: -&lt;BR /&gt;{&lt;BR /&gt;  - If a request comes to the browser from an applet to fetch the&lt;BR /&gt;    JavaScript window object corresponding to the applet, drain the&lt;BR /&gt;    queued up messages corresponding to JavaScript-to-Java calls,&lt;BR /&gt;    which would otherwise occur when init() was completed.&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;So it appears that through the wonders of Java6 we now have your init()&lt;BR /&gt;method and your JavaScript executing in parallel (presumably in seperate&lt;BR /&gt;threads), but *only* if you're doing something with JSObject. And for the&lt;BR /&gt;squeamish among us that like our initialization to finish before the&lt;BR /&gt;mainline methods start crunching numbers, there's now a need for&lt;BR /&gt;intervention.&lt;BR /&gt;&lt;BR /&gt;I do glance through the JRE release notes when they come out but can't&lt;BR /&gt;recall seeing this one; anyone else?&lt;BR /&gt;&lt;BR /&gt;Anyway, thanks to a guy in cljp, the answer is to "synchronized" all applet methods that need it. (Or at least init() and the one you want to call from JavaSCript to block on.)&lt;BR /&gt;&lt;BR /&gt;Cheers Richard Maher&lt;BR /&gt;&lt;BR /&gt;PS. Happy Mother's Day to all the Mums in this part of the world!&lt;BR /&gt;</description>
      <pubDate>Sat, 09 May 2009 23:28:54 GMT</pubDate>
      <guid>https://community.hpe.com/t5/operating-system-openvms/javascript-not-being-blocked-synched-by-applet-init/m-p/4416429#M42212</guid>
      <dc:creator>Richard J Maher</dc:creator>
      <dc:date>2009-05-09T23:28:54Z</dc:date>
    </item>
  </channel>
</rss>

