Re: JavaScript not being blocked/synched by Applet init()
(Shameless bump.)
Just in case you were on school holidays and missed the opportunity to solve
this conundrum, here it is again :-)
Cheers Richard Maher
"Richard Maher" <maher_rj@hotspamnotmail.com> wrote in message
news:gsmp8k$hfo$1@news-01.bur.connect.com.au...
Hi,
I'm probably seeing-things again but here goes: -
IE6 with JRE 1.6.0_12 looks to continue the Javascript processing while my
Applet.init() has yet to return. FireFox is fine and when I went for a
small
reproducer IE also performed as expected. (Both with Applet appended in a
<div> or document.writeN() as an <object> in the body)
See below for a reasonable code snippet, but the critical bit is this: -
var tier3Chan;
try {
document.body.appendChild(appletDiv);
tier3Chan = document.getElementById(appletId);
alert("Auth = " + tier3Chan.getThree());
var userAuthorized = tier3Chan.isAuthorized();
}
catch(err) {
alert("Err =" + err.description);
tier3Chan = null;
};
If I take out that 'alert("Auth =' bit then isAuthorised() gets called and
returns false even though the user hasn't had a chance to enter their
Username/Password yet. (Pop-up dialog currently sitting on the screen)
I understand when it would be valid to let the JS run past the
getElementById so I normally stick a method call (such as isAuthorized())
in
their to force the block-for-init but this time it doesn't seem to work
:-(
For a similar setup please see: -
http://manson.vistech.net/t3$examples/demo_client_flex.html
Username: TIER3_DEMO
Password: QUEUE
All (slightly dated) Java/Javascript/HTML source code is at: -
http://manson.vistech.net/t3$examples/
Unfortunately that example works but the one below doesn't :-(
Anyone know the mechanics behind what Javascript is looking for on IE to
tell it that the Applet has finished init()ing? Or how I might be stomping
on it? (Or at least failing to flag it?)
Cheers Richard Maher
/**
* Copyright (c) Richard Maher. All rights reserved.
*/
function Tier3Client(application,
codeBase,
port,
maxBuf,
hostCharSet,
sslReqd)
{
this.application = application;
this.codeBase = codeBase;
this.port = port;
this.maxBuf = maxBuf;
this.hostCharSet = hostCharSet;
this.sslReqd = sslReqd;
var appletId = "Tier3__" + application + "_Applet";
try {
var idTaken = document.getElementById(appletId);
}
catch (err) {};
if (idTaken != null) {
throw new Error("Tier3 Client already registered for " +
this.application);
return;
}
var archiveName = "tier3Client.jar";
var className = "tier3Client/Tier3Application";
var appletParams = [{"name":"archive", "value":archiveName},
{"name":"codebase", "value":codeBase },
{"name":"code", "value":className },
{"name":"mayscript", "value":"true" },
{"name":"scriptable", "value":"true" },
{"name":"APPLICATION", "value":application},
{"name":"PORT", "value":port },
{"name":"MAXBUF", "value":maxBuf },
{"name":"HOSTCHARSET", "value":hostCharSet},
{"name":"SSLREQD", "value":sslReqd }];
var startParam = 0;
var objectTag = "<object classid=";
if (/Internet Explorer/.test(navigator.appName)) {
objectTag = objectTag +
'"clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" ';
} else {
objectTag = objectTag +
'"java:' + className + '.class"
type="application/x-java-applet
" ' +
'archive="' + codeBase + archiveName + '"';
startParam = 1;
}
objectTag = objectTag + ' width= "0" height= "0" id="' + appletId +
'">';
for (i=startParam; i<appletParams.length; i++){
objectTag = objectTag + '<param name ="' + appletParams[i].name
+
'" ' +
'value ="' + appletParams[i].value
+
'">';
}
objectTag = objectTag + "</object>";
var appletDiv = document.createElement("div");
appletDiv.innerHTML = objectTag;
var tier3Chan;
try {
document.body.appendChild(appletDiv);
tier3Chan = document.getElementById(appletId);
alert("Auth = " + tier3Chan.getThree());
var userAuthorized = tier3Chan.isAuthorized();
}
catch(err) {
alert("Err =" + err.description);
tier3Chan = null;
};
alert("After check");
if (tier3Chan == null) {
throw new Error("Tier3 was unable to initialize the applet for " +
this.application);
return;
} else {
if (!userAuthorized) {
throw new Error("Tier3 User authentication unsuccessful for "
+
this.application);
return;
}
}
this.chan = tier3Chan;
Tier3Client.applications[this.application] = this;
return this;
}