Could someone explain part of this function?

N

Nick

Hi
I have managed to Plagiarize and modify a piece of script that checks
to see if JAVA is installed on the users pc:

function javaInstalled()
{
result = false;
if (navigator.mimeTypes &&
navigator.mimeTypes["application/x-java-vm"])
{
result = navigator.mimeTypes["application/x-java-vm"].enabledPlugin;
}
else if (document.all && (navigator.appVersion.indexOf("Mac")==-1))
{
// IE Windows only -- check for ActiveX control, have to hide code
in eval from Netscape (doesn't like try)
eval ('try {var xObj = new ActiveXObject("Javaplugin");if
(xObj) result = true; xObj = null; } catch (e) {}');
}
return result;
}

if (javaInstalled())
{
//do nothing
}
else
{
newWindow = window.open('../nojava.html', 'newWin',
'width=420,height=250')
}

I have tried it on a machine that doesn't have JAVA installed and it
works exactly as i want it to. I can't however figure out what the
"eval ('try {var xObj = new ActiveXObject("Javaplugin");if
(xObj) result = true; xObj = null; } catch (e) {}');"
bit means and it's importance, i know it doesn't work if its not
present!!!
Any help would be appreciated and also if it would work with Netscape(
not sure what the comment is saying)

Thanks

Nick
 
N

Nathan White

Well technically you could just use:

window.navigator.javaEnabled();

but it has some issues with older Netscape browsers (
http://segal.org/macjavabugs/enabled/ )

In terms of your question: the new ActiveXObject is an IE specific
Object that allows you to access ActiveX. I donno how reliable this is
since it is ActiveX. It seems to me with more and more browser security
issues that ActiveX could be disabled or unaccessible to your scripts.

The other concern I have with your example is the fact that eval is
used. In this case it does not seem neccessary to have that statement
wrapped in eval. It seems like a slowdown. You function code be
simplified:

function javaInstalled(){
// if we can quickly determine java is enable return quickly
if( window.navigator.javaEnabled() ) return true;
// if netscape style plugins check to see if java is enabled
if (navigator.mimeTypes &&
navigator.mimeTypes["application/x-java-vm"]) return true;
// if IE and not the Mac version need to check ActiveXObject
else if (document.all && (navigator.appVersion.indexOf("Mac")==-1)){
try {
// create a Java ActiveX Object
var xObj = new ActiveXObject("Javaplugin");
if (xObj) return true;
} catch (e) {}
}
// if we get here we haven't detected java
return false;
}

I added comments and added a condition on the top of the function. I
did this because the script overhead will be greatly reduced if you
don't have to create an ActiveX object at least logic suggest so ;-)
 
N

Nick

Hi Nathan
Thanks for the reply
window.navigator.javaEnabled(); doesn;t actually work because as far
as i can work out it detects if it's enabled bit doesnot check if its
installed... ( i tried it on a machine with no JAVA ( or Microsoft JVM)
). The modified code doesn't work either, as testd against the
original. Thanks for your input.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,042
Latest member
icassiem

Latest Threads

Top