Entdecker: JS-Code jede Sekunde einmal ausführen

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>

  1. 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

    setTimeout()

    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

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. 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

      1. 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

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. 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