JS-Code jede Sekunde einmal ausführen
Entdecker
- javascript
Nabend,
ich habe da einen JS-Code, der überprüft, ob ein bestimmtes ActiveX-Control installiert ist. Wie der Code aussieht, hab ich unten angefügt. Der Code kommt von Apple - ich selber habe JS immer gemieden, deshalb frag ich jetzt auch. Sehe für die Lösung leider keine andere Möglichkeit, aber darum soll es hier auch nicht gehen.
Im Prinzip soll der Code einfach nur jede Sekunde einmal ausgeführt werden - solange, bis er eben feststellt, dass das Control installiert wurde. Wenn man ganz nach unten schaut, sieht man dort diese Kommentarzeile:
// Kein ActiveX installiert - nochmal ausführen
An der Stelle müsste einfach ein Befehl stehen, der den Code nochmal ausführen lässt, ohne dabei die Seite neu zu laden (das darf nicht passieren, denn die Seite wird ja gebraucht, um das ActiveX zu installieren).
Kann da jemand weiterhelfen?
Grüße
<script language="JavaScript">
<!--
// initialize a variable to test for JavaScript 1.1.
// which is necessary for the window.location.replace method
var javascriptVersion1_1 = false;
// -->
</script>
<script language="JavaScript1.1">
<!--
javascriptVersion1_1 = true;
// -->
</script>
<script language="JavaScript">
<!--
// initialize global variables
var detectableWithVB = false;
var pluginFound = false;
function goURL(daURL) {
// if the browser can do it, use replace to preserve back button
if(javascriptVersion1_1) {
window.location.replace(daURL);
} else {
window.location = daURL;
}
return;
}
function redirectCheck(pluginFound, redirectURL, redirectIfFound) {
// check for redirection
if( redirectURL && ((pluginFound && redirectIfFound) ||
(!pluginFound && !redirectIfFound)) ) {
// go away
goURL(redirectURL);
return pluginFound;
} else {
// stay here and return result of plugin detection
return pluginFound;
}
}
function canDetectPlugins() {
if( detectableWithVB || (navigator.plugins && navigator.plugins.length > 0) ) {
return true;
} else {
return false;
}
}
function detectActiveChat(redirectURL, redirectIfFound) {
pluginFound = detectPlugin('WollnyITService');
// if not found, try to detect with VisualBasic
if(!pluginFound && detectableWithVB) {
pluginFound = detectActiveXControl('WollnyITService.ActiveChat');
}
return redirectCheck(pluginFound, redirectURL, redirectIfFound);
}
function detectPlugin() {
// allow for multiple checks in a single pass
var daPlugins = detectPlugin.arguments;
// consider pluginFound to be false until proven true
var pluginFound = false;
// if plugins array is there and not fake
if (navigator.plugins && navigator.plugins.length > 0) {
var pluginsArrayLength = navigator.plugins.length;
// for each plugin...
for (pluginsArrayCounter=0; pluginsArrayCounter < pluginsArrayLength; pluginsArrayCounter++ ) {
// loop through all desired names and check each against the current plugin name
var numFound = 0;
for(namesCounter=0; namesCounter < daPlugins.length; namesCounter++) {
// if desired plugin name is found in either plugin name or description
if( (navigator.plugins[pluginsArrayCounter].name.indexOf(daPlugins[namesCounter]) >= 0) ||
(navigator.plugins[pluginsArrayCounter].description.indexOf(daPlugins[namesCounter]) >= 0) ) {
// this name was found
numFound++;
}
}
// now that we have checked all the required names against this one plugin,
// if the number we found matches the total number provided then we were successful
if(numFound == daPlugins.length) {
pluginFound = true;
// if we've found the plugin, we can stop looking through at the rest of the plugins
break;
}
}
}
return pluginFound;
} // detectPlugin
// Here we write out the VBScript block for MSIE Windows
if ((navigator.userAgent.indexOf('MSIE') != -1) && (navigator.userAgent.indexOf('Win') != -1)) {
document.writeln('<script language="VBscript">');
document.writeln('detectableWithVB = False');
document.writeln('If ScriptEngineMajorVersion >= 2 then');
document.writeln(' detectableWithVB = True');
document.writeln('End If');
document.writeln('Function detectActiveXControl(activeXControlName)');
document.writeln(' on error resume next');
document.writeln(' detectActiveXControl = False');
document.writeln(' If detectableWithVB Then');
document.writeln(' detectActiveXControl = IsObject(CreateObject(activeXControlName))');
document.writeln(' End If');
document.writeln('End Function');
document.writeln('</scr' + 'ipt>');
}
var ableToDetect = canDetectPlugins();
if(ableToDetect) {}
else {
// ActiveX-Status lässt sich nicht überprüfen; weitermachen.
}
var ActiveChatInstalled = detectActiveChat();
if(ActiveChatInstalled) {
// ActiveX installiert; weitermachen.
}
else {
// Kein ActiveX installiert - nochmal ausführen.
}
// -->
</script>
hi,
Im Prinzip soll der Code einfach nur jede Sekunde einmal ausgeführt werden - solange, bis er eben feststellt, dass das Control installiert wurde. [...]
An der Stelle müsste einfach ein Befehl stehen, der den Code nochmal ausführen lässt
Wie sinnvoll das in diesem Falle ist, lasse ich mal dahingestellt.
Etwas zu installieren erfordert eine bewusste Entscheidung des Nutzers. Da könnte man ihn doch m.E. genauso gut bitte, die Seite nach der Installation erneut aufzurufen. Zumal, je nachdem, um welche Art von Control es sich handelt, evtl. auch erst mal ein Neustart des Browsers erforderlich sein könnte, damit es "aktiv" wird.
gruß,
wahsaga
Wie sinnvoll das in diesem Falle ist, lasse ich mal dahingestellt.
Etwas zu installieren erfordert eine bewusste Entscheidung des Nutzers. Da könnte man ihn doch m.E. genauso gut bitte, die Seite nach der Installation erneut aufzurufen. Zumal, je nachdem, um welche Art von Control es sich handelt, evtl. auch erst mal ein Neustart des Browsers erforderlich sein könnte, damit es "aktiv" wird.gruß,
wahsaga
Hallo,
danke erstmal. Ja, man *könnte* ihn bitten, die Seite nach der Installation erneut aufzurufen. Man könnte es aber auch lassen. Auf meiner Installseite, wo das ActiveX eingebunden ist, wird im Control eine Grafik angezeigt - damit weiß der Benutzer, dass es installiert ist. Dazu gibt es einen Link, auf den der Benutzer klicken soll, sobald er die Grafik sieht.
Nach dem, was ich von den Benutzern so mitbekommen habe, klicken die meisten einfach nur auf den Link - egal ob installiert oder nicht. Da ist was zum Anklicken, also wird draufgeklickt. Auch die Anweisungen werden gepflegt ignoriert, wie dutzende Nachfragen per Mail beweisen. Das muss man sich mal reinziehen: Da beschweren sich die Benutzer lieber per Mail über das Nichtfunktionieren, als einfach die Install-Hinweise (3 einfache Schritte) durchzulesen, wo alle diese Fragen geklärt werden.
Also - warum sollte ich nun den Benutzer bitten, die Seite zu aktualisieren? ;-)
Grüße
hi,
Auf meiner Installseite, wo das ActiveX eingebunden ist, wird im Control eine Grafik angezeigt - damit weiß der Benutzer, dass es installiert ist. Dazu gibt es einen Link, auf den der Benutzer klicken soll, sobald er die Grafik sieht.
Nach dem, was ich von den Benutzern so mitbekommen habe, klicken die meisten einfach nur auf den Link - egal ob installiert oder nicht. Da ist was zum Anklicken, also wird draufgeklickt.
Dann präsentiere nichts zum Anklicken, wenn die Prüfung nicht erfolgreich war - generiere den Link per Javascript nur dann, wenn die Prüfung erfolgreich war.
gruß,
wahsaga
Dann präsentiere nichts zum Anklicken, wenn die Prüfung nicht erfolgreich war - generiere den Link per Javascript nur dann, wenn die Prüfung erfolgreich war.
Genau das hab ich vor, und dafür brauchte ich deine Hilfe - Danke ;-)
Grüße