Re: Using Javascript to find if Java applet has loaded
On Jan 9, 5:59 pm, "Richard Maher" <maher...@hotspamnotmail.com>
wrote:
Hi Jason,
"Richard Maher" <maher...@hotspamnotmail.com> wrote in message news:...
Hi Jason,
"Jason Carlton" <jwcarl...@gmail.com> wrote in message
news:a8e19be8-5116-4889-b26b-b1998b2d7c26@j19g2000yqk.googlegroups.com..=
..
Specifically, Parachat. I'm showing an absolutely positioned element
when the user logs in, and I want to use Javascript to remove that
element when the applet fully loads. Or, if it hasn't loaded within a
certain amount of time, just redirect to an error page.
Has anyone found a way to determine when the applet has fully loaded?
Right now, I'm just using setTimeout to count to 30 seconds, which is
far from perfect.
TIA,
myAppletRef = document.getElementById(appletId);
Should handle most of your requirements and not return until the applet=
is
there. Having said that, if possiblem it should be followed up by some
method-call back into the Applet. And if you're usung LiveConnect then
make
sure the method you're calling is synchronized (and the init() is also
synchronized) as the init() has a nasty habbit of continuing on *after*
it's
let the Javascript thread free :-(
Below is a more complete example.
Jason
Cheers Richard Maher
/**
* Copyright (c) Richard Maher. All rights reserved.
*
* Tier3Client class bridges Javascript and Applet
* functionality.
*/
function Tier3Client(application,
codeBase,
port,
maxBuf,
hostCharSet,
sslReqd,
guiToolkit,
idleTimeout,
verbosity)
{
if (arguments.length < 4) {
throw new Error("Insufficient arguments for Tier3Client=
");
}
if (!navigator.javaEnabled()) {
alert("You must enable Java Applets in your browser\n" =
+
"before you can successfully access this pa=
ge");
throw new Error("Java Applets are not enabled for brows=
er");
}
this.application = application;
this.codeBase = codeBase;
this.port = port;
this.maxBuf = maxBuf;
this.hostCharSet = (hostCharSet == undefined) ? "ISO-8859=
-1" :
hostCharSet;
this.sslReqd = (sslReqd == undefined) ? "=
N" :
sslReqd;
this.guiToolkit = (guiToolkit == undefined) ? Tier3=
Client.GUIAWT :
guiToolkit;
this.idleTimeout = (idleTimeout == undefined) ? 0 =
:
idleTimeout;
this.verbosity = (verbosity == undefined) ? Tier3=
Client.WARNING :
verbosity;
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":"java_version",
":"1.6+" },
{"name":"mayscript",
lue":"true" },
{"name":"scriptable",
ue":"true" },
{"name":"codebase_looku=
p",
"false" },
{"name":"APPLICATION",
"value":application },
{"name":"PORT",
"value":port },
{"name":"MAXBUF",
"value":maxBuf },
{"name":"HOSTCHARSET",
"value":this.hostCharSet},
{"name":"SSLREQD",
"value":this.sslReqd },
{"name":"GUITOOLKIT",
"value":this.guiToolkit },
{"name":"IDLETIMEOUT",
"value":this.idleTimeout},
{"name":"VERBOSITY",
"value":this.verbosity }];
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 ="' + apple=
tParams[i].name
'value ="' + appletParams[i].value
+
'">';
}
objectTag = objectTag + "</object>";
var appletDiv = document.createElement("div");
appletDiv.innerHTML = objectTag;
try {
document.body.appendChild(appletDiv);
this.chan = document.getElementById(appletId);
}
catch(err) {
alert("Tier3 unable to load applet for " + this.applica=
tion +
": -\n" + err.description);
this.chan = null;
};
if (this.chan == null) {
throw new Error("Tier3 was unable to initialize the app=
let for " +
this.application);
} else {
try {
if (!this.chan.isAuthorized()) {
throw new Error("Tier3 User Authenticat=
ion unsuccessful
for
" + this.application);
}
}
catch(err) {
this.chan.setAttribute("id",null);
this.chan = null;
throw new Error("Tier3 unable to load applet fo=
r " +
this.application + ": -\n" + err.description);
}
}
Tier3Client.applications[this.application] = this;
return this;
}
Tier3Client.FACPREFIX = "T3$";
Tier3Client.MAJVERS = 1;
Tier3Client.MINVERS = 0;
Tier3Client.GUIAWT = 1;
Tier3Client.DEBUG = 0;
Tier3Client.INFO = 1;
Tier3Client.WARNING = 2;
Tier3Client.ERROR = 3;
Tier3Client.FATAL = 4;
Tier3Client.errorPage = "Tier3Error.html";
Tier3Client.logoffPage = "Tier3Logoff.html";
Tier3Client.launder =
function(jsobject) {
return jsobject;
};
Tier3Client.prototype = {
send:
function(msgBody, callback, async)
{
if (arguments.length < 2) {
throw new Error("Insufficient arguments=
for send(msgBody,
callback)");
}
if (typeof callback != "function") {
throw new Error("The 'callback' paramet=
er must be a
function");
}
var noWait = true;
if (arguments.length > 2) {
if (typeof async != "boolean") {
throw new Error("The 'async' pa=
rameter must be a
boolean");
}
noWait = async;
}
var chan = this.chan;
var callbackArgs = new Array();
var responseCnt = 0;
var i = 0;
var msgCandidate =
{
msgSlotId : -1,
msgSeqNum : -1,
chan : chan,
callback : callback,
callbackArgs : callbackArgs,
dispatcher :
function(responseMsg,
msgSlotId,
msgSeqNum)
{
this.responseCnt++;
this.msgSlotId = ms=
gSlotId;
gSeqNum;
onseMsg;
his, callbackArgs);
}
catch (err) {
throw new Error(=
"Error calling callback
routine: -\n" + err.description);
}
},
getMsgSeqNum :
function() {
return this.msgSeqNum;
},
getResponseCnt:
function() {
return this.responseCnt=
;
},
rendezvous :
function() {
return chan.rendezvous(=
);
}
};
for (i=3; i<arguments.length; i++) {
callbackArgs[i - 2] = arguments[i];
}
return chan.send(msgCandidate, msgBody, noWait)=
;
},
appendConsoleMsg:
function(msg)
{
this.chan.appendConsoleMsg(msg);
}
};
Tier3Client.applications = {};
Did you have any luck [Using Javascript to find if Java applet has loaded=
].
Although, the "solution" I described above works for Firefox and IE*, I h=
ave
to report that it doesn't work with Opera and Chrome has a some sort race
condition where it sometimes works :-(
What mechanism(s) did you/others settle on?
Cheers Richard Maher
Honestly, Richard, I haven't used it yet :-( I tried implementing it
but couldn't get it to work, but then other issues came up that pushed
this one to a back-burner.
I'll keep you posted when I work on it more, though.
Thanks, Richard,
Jason