Rolf B: Link mit Variable

Beitrag lesen

Hallo stefantaust,

oh mein Gott. Du brauchst einen Grundkurs JavaScript! https://wiki.selfhtml.org/wiki/JavaScript#Tutorials

Aber sei gewarnt, das ist nicht "eben mal so" - denn das, was Du hier gemacht hast, geht an Dingen kaputt, für die man schon einiges von den Konzepten hinter JavaScript verstanden haben muss.

onclick="javascript:StartProgramm('myPath1')+' '+val2

Soll das der Aufruf des Programms "mit Parameter" sein?

Selbst wenn in val2 was sinnvolles drinstände, in der StartProgramm-Funktion käme es nicht an. Da wird StartProgramm mit 'myPath1' als Parameter aufgerufen, und was die Funktion zurückgibt (nämlich nichts) wird mit einer Leerstelle und dem Inhalt von val2 (auch nichts) verknüpft.

val2 ist eine lokale Variable der StartProgramm-Funktion. Scripte, die Du in onclick hinterlegst, laufen im globalen Datenraum (genauer: im globalen Scope) und können lokale Variablen in Funktionen nicht sehen. Selbst wenn Du val2 was sinnvolles zuweisen würdest (tust Du nicht), wäre der zugewiese Wert räumlich (was Sichtbarkeit angeht) und zeitlich (was den Zeitpunkt der Zuweisung angeht) nicht erreichbar. Du weist ja erst zu, nachdem StartProgramm einmal aufgerufen wird.

Und dann steht da

   var val2 = -beta;
   var val3 = -dev;

Ich nehme an, du möchtest, dass das Zeichenketten sind. Dann müssen sie in Anführungszeichen stehen:

   var val2 = "-beta";
   var val3 = "-dev";

Ohne die Anführungszeichen sucht JavaScript nach Variablen beta und dev, die es vermutlich nicht gibt, und versucht, ihr Vorzeichen umzudrehen

Wenn Du "-beta" und "-dev" unbedingt in einer Variablen haben willst, musst Du diese Variablen im globalen Scope anlegen. Also vor oder nach der Funktion.

Wenn es unbedingt Variablen sein sollen, benenne sie sinnvoll. val2 und val3 sind sinnvernichtend.

Guck Dir die Signatur von StartProgramm an (Signatur: Welche Parameter erwartet die Funktion). Da steht (Path, Parameter). Daraus deute ich: Diese Funktion kann Programmparameter als zweiten Parameter entgegennehmen.

D.h. du müsstest den Aufruf z.B. so hinterlegen:

onclick="javascript:StartProgramm('myPath1', '-beta')"

oder so, wenn "-beta" in einer Variablen namens betaParm stünde:

onclick="javascript:StartProgramm('myPath1', betaParm)"

Allerdings ist die Funktionssignatur irreführend, du nimmst zwar einen Parameter namens parameter an, machst dann aber nichts damit. Du musst abfragen, ob da was anderes als undefined drin steht, und es dann mit dem Programmnamen verknüpfen.

function StartProgramm(Path,Parameter) {
  var programm = document.getElementById(Path).value;
  if (typeof Parameter == "string") {
    programm = programm + ' ' + Parameter; 
  }

  // Erzeugen des ActiveX Objekts
  var WshShell = new ActiveXObject("WScript.Shell");

  // gewünschtes Programm starten
  WshShell.Run(programm);
}

Ich habe "var" stehen gelassen. Auf die Feinheiten von var, let und const gehe ich jetzt nicht ein...

Dein Programm tool1.exe, das Du über einen UNC-Pfad aufrufst, ist auch so eine Sache. Sharepoint ist normalerweise was für viele User, und Du musst dann sicherstellen, dass jeder, der die Seite sieht, auch das Share \192.168.1.20\daten lesen darf. Hinzu kommt, dass Windows Programmen, die über LocalNetwork geladen wurden, nicht unbedingt vertraut. Es kann sein, dass das Programm nur für Administratoren funktionieren. Das musst Du testen.

Rolf

--
sumpsi - posui - obstruxi