Link mit Variable
stefantaust
- html
Hallo
ich habe ein Problem bei einem Link mit einer Variable
Es wird von unserer Software immer eine Link erstellt die eine Variable beinhaltet.
http://www.example.org/daten/1111/aktuell/dokument.pdf
am nächsten Tag ändert sich die Zahl auf 1112 usw...
Die Datei Dokument.pdf ist dann immer der aktuelle Stand
Wie kann ich das am besten in html verlinken, damit der Link immer passt
Danke Stefan
@@stefantaust
Es wird von unserer Software immer eine Link erstellt die eine Variable beinhaltet.
http://www.example.org/daten/1111/aktuell/dokument.pdf
Was ist „eure Software“?
Was erstellt eure Software? Einen Link wie
<a href="http://www.example.org/daten/1111/aktuell/dokument.pdf">
?
Wohl kaum, denn dann hätte sich deine Frage ja erledigt.
Erstellt eure Software vielleicht PDF-Dateien? Warum überschreibt die aktuelle nicht einfach die vorige?
😷 LLAP
Hallo Stefan,
http://www.example.org/daten/1111/aktuell/dokument.pdf
am nächsten Tag ändert sich die Zahl auf 1112 usw...
Die Datei Dokument.pdf ist dann immer der aktuelle Stand
Wie kann ich das am besten in html verlinken, damit der Link immer passt
das kommt drauf an, welche technischen Möglichkeiten dir zur Verfügung stehen und mit welchen du zurechtkommst. Die einfachste, für mich offenschtliche Lösung wäre, die Nummer einfach wegzulassen, also den tagesaktuellen Link immer als
http://www.example.org/daten/aktuell/dokument.pdf
zu erzeugen.
Falls das nicht geht, musst du tatsächlich den Link im HTML-Dokument von Tag zu Tag verändern. Ist es das, was du willst?
Live long and pros healthy,
Martin
Hallo,
danke für die Antworten. Die Zahl ist ein Revisionsstand und muss bleiben.
http://www.example.org/daten/1111/aktuell/dokument.pdf
Der Link ist in eine Intranetseite eingebaut und kann natürlich nicht täglich geändert werden
müsste doch mit html und javascript möglich sein, oder?
Stefan
@@stefantaust
müsste doch mit html und javascript möglich sein, oder?
Sinnvoll wäre es, das serverseitig zu tun. Welche serverseitige Technik steht zur Verfügung? PHP? Node.js?
😷 LLAP
@@Gunnar Bittersmann
müsste doch mit html und javascript möglich sein, oder?
Sinnvoll wäre es, das serverseitig zu tun. Welche serverseitige Technik steht zur Verfügung? PHP? Node.js?
PHP: time()
, entsprechenden Offset abziehen, Sekunden in Tage umrechnen, abrunden – fertig.
In JavaScript wär’s Date.now()
(Achtung: Millisekunden). Aber wie gesagt: serverseitig ist sinnvoll.
😷 LLAP
Hallo Gunnar,
PHP: nein, nicht time(). PHP bringt das nötige Werkzeug mit:
$basisDatum = new DateTime("2018-01-01");
$tagesDatum = new DateTime();
$datumsDifferenz = $d2->diff($d1);
$anzahlTage = $diff->days;
Oder als "Einzeiler":
$anzahlTage = (new DateTime())->diff(new DateTime("2018-01-01"))->days;
Rolf
Hallo stefantaust,
Die Zahl ist ein Revisionsstand und muss bleiben.
Wenn das ein Revisionsstand ist, warum geht's dann mit "aktuell" weiter? Entweder hast Du einen Stand archiviert, oder es ist aktuell. Das aber nur am Rande.
Wie Gunnar sagte: Es wäre am besten, wenn der Server gleich den richtigen Link liefert.
Aber am Client geht's auch.
Wäre es eine Alternative, den Revisionsstand mit einer achtstelligen Zahl zu bilden? Sowas wie 20210720 - für den 20.07.2021? Diese Zahl könnte ein Client relativ einfach aus dem Tagesdatum per JavaScript konstruieren.
Die 1111 könnte man natürlich auch konstruieren, das setzt aber eine lückenlose Nummerierung ab einem bestimmten Anfangsdatum voraus. Wenn die vorliegt, kann man die Millisekundendarstellung von Tagesdatum und Anfangsdatum nehmen, die Differenz bilden und durch 86400000 teilen. Das muss man noch runden, fertig. Wichtig ist nur, für beide Tage die gleiche Uhrzeit zu wählen, und kaufmännisch zu runden, nicht ab- oder aufrunden, sonst kann die Sommerzeitumstellung zu Überraschungen führen.
Rolf
Hallo,
schon mal danke für die Antworten
Es ist die Software GitLab liefert bei einem Release immer den Pfad mit der Revisionsnummer.
Soll irgendwann umgeändert werden in "latests" aber das heißt es schon lange und ich brauche deshalb eine Übergangslösung.
Bei einer Release Erstellung wird dann irgendwann mal die Rev Nummer durch latest ersetzt und der Pfad wäre dann immer gleich
Stefan
Hallo stefantaust,
d.h. es liegt an euerem Gebrauch von Gitlab, ob es täglich eine neue Version gibt oder nicht.
Es könnte auch mal mehr als eine geben, oder es fällt mal eine aus - und sage nicht, das kommt nicht vor. Es WIRD vorkommen. Organisatorische Regeln finden immer mal Ausnahmen.
Aber du erzählst viel zu wenig, als dass man Dir konkret helfen könnte. Du hast offensichtlich eine Integrationsaufgabe zu lösen, und das ist immer eine kreative Bastelei. Ohne Kenntnis des Bastelmaterials kann man aber nicht basteln.
Welches Gitlab? Ein eigener Klon? Oder gitlab.com?
Und wo kommt die Seite her, die den Link enthält? Ist das statisches HTML, das als Datei in einem Gitlab-Projekt steckt? Oder wird sie von einem eigenständigen Webserver ausgeliefert?
Rolf
Hallo Rolf,
für Gitlab muss ich erst selbst mal ein paar Infos in Erfahrung bringen. Ein kleines anderes Problem habe ich noch.
Hinter einem Link, soll ein Parameter übergeben werden und in Sharepoint ausführbar sein
Der Link ist immer verschieden. Ohne die Parameterübergabe funktioniert der Link. Ich schaffe es nur nicht die Parameter zu übergeben
\192.168.1.20\daten\software\tool1.exe -beta
</head>
<body>
<script type="text/javascript">// <![CDATA[
function StartProgramm(Path,Parameter) {
var vPath = document.getElementById(Path).value;
// Erzeugen des ActiveX Objekts
var WshShell = new ActiveXObject("WScript.Shell");
// gewünschtes Programm starten
WshShell.Run(vPath);;
var val2 = -beta;
var val3 = -dev;
}
</script>
<input type="text" size="100" id="myPath1" value='\\192.168.1.20\daten\software\tool1.exe'/><br />
<br />
<button onclick="javascript:StartProgramm('myPath1')+' '+val2;return false;" style="width: 220px">
<strong>BETA</strong></button>
<br />
<br />
<button onclick="javascript:StartProgramm('myPath1')+' '+val3;return false;" style="width: 220px">
<strong>DEV</strong></button>
<br />
<br />
<button onclick="javascript:StartProgramm('myPath1')" style="width: 220px">
<strong>STD</strong></button>
Quelltext hier
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
Moin Stefan,
für Gitlab muss ich erst selbst mal ein paar Infos in Erfahrung bringen. Ein kleines anderes Problem habe ich noch.
(Das wäre eigentlich Thema eines neuen Threads.)
Hinter einem Link, soll ein Parameter übergeben werden und in Sharepoint ausführbar sein
Der Link ist immer verschieden. Ohne die Parameterübergabe funktioniert der Link. Ich schaffe es nur nicht die Parameter zu übergeben
\192.168.1.20\daten\software\tool1.exe -beta
Du möchtest per Link aus einer Web-/HTML-Seite ein Programm ausführen, das an einem anderen Ort – auf einem Windows Share (nicht SharePoint) – liegt. Aus (hoffentlich naheliegenden) Sicherheitsgründen ist das keine gute Idee.
function StartProgramm(Path,Parameter) { var vPath = document.getElementById(Path).value; // Erzeugen des ActiveX Objekts var WshShell = new ActiveXObject("WScript.Shell"); // gewünschtes Programm starten WshShell.Run(vPath); // … }
ActiveX funktioniert nur im Microsoft Internet Explorer unter Windows – und der ist von Seiten Microsofts abgekündigt. Selbst wenn in der in deiner Umgebung noch vorhanden ist, braucht es meines Wissens spezielle Sicherheitseinstellungen, damit dein Anliegen erlaubt ist.
<input type="text" size="100" id="myPath1" value='\\192.168.1.20\daten\software\tool1.exe'/><br /> <br /> …
Hier fallen mir verschiedene Sachen auf:
br
-Elemente zur optischen Gliederung (Absatzerzeugung) verwendet. HTML kennt für Absätze das p
-Element.label
s u.ä.).Viele Grüße
Robert
Hallo Robert,
ich bin sicher, das dieses Problem durch großzügiges Abschalten der Security-Regler gelöst wurde.
Das Ganze sieht nach einer "Expertenanwendung" in einem kleinen Intranet aus. 192.168.1.20 ist kein Großnetz. Den IE wird's für Windows-User noch 8 Jahre oder so geben, bis sie ihn... wiedermal verlängern. Ich befürchte, das Ding wird überleben bis die Welt auf Windux umsteigt und selbst dann traue ich den Microsofties zu, das Ding per Wine oder anderswie noch bereitzustellen. Damit die 47 Großunternehmen, deren Intranet ohne IE zusammenbricht, zufrieden sind.
Aber für alle anderen ist der IE tot.
Rolf
Hallo,
danke für die zahlreichen Antworten und Hilfe. 👍
Ja das mit dem IE ist so eine Sache.
Da ist definitiv im Mai 2022 für uns Schluss.
Es gibt eine Anwendung die es Übernimmt, https://www.webrunapps.com/ da würde jeder Browser funktionieren, aber in der Whitelist kann man nur EXE Pfade anlegen. Zum öffnen von Ordner oder Batch Dateien funktioniert das nicht.
Aktuell wissen wir noch nicht wie wir das in Zukunft machen sollen. Jetzt öffnen wir den Edge im IE Kompatibilitätsmodus.
Wir brauchen eine Linksammlung für Produktionsmitarbeiter damit die Programme und Tools einfach gestartet werden können, ohne zu wissen wo das Programm eigentlich abgelegt ist.
Stefan
Hallo stefantaust,
Wir brauchen eine Linksammlung für Produktionsmitarbeiter damit die Programme und Tools einfach gestartet werden können, ohne zu wissen wo das Programm eigentlich abgelegt ist.
Für einen Schmied ist jedes Werkzeug ein Hammer, aber man braucht nicht für jedes Problem einen Hammer. Oder eine Webseite.
Mach einen Ordner auf einem Netzwerkshare voller Verknüpfungen zu den Programmen. Die Leute legen sich eine Verknüpfung auf den Ordner auf ihren Desktop/ins Startmenü/auf die Taskleiste.
Wenn ein Programm hinzukommt oder sich der Speicherort ändert, ändere die entsprechende Verknüpfung im Share. Du kannst Verknüpfungen auch mit Rechten versehen, dass nicht jeder jede Verknüpfung sieht, und den Order auf Readonly setzen, damit keiner Schabernack treibt und die Verknüpfungen ändert.
Zu „guten“ alten DOS Zeiten gab's auch Tools, mit denen man sich Startmenüs bauen konnte, aber die Zeiten sind wohl obsolet.
Rolf
Hallo,
Zu „guten“ alten DOS Zeiten gab's auch Tools, mit denen man sich Startmenüs bauen konnte, aber die Zeiten sind wohl obsolet.
wieso das? Benutzerdefinierte Symbolleisten in der Windows-Taskleiste sind im Grunde nichts anderes. Ich kenne eine Handvoll Leute (mich eingeschlossen), die das gut finden und nutzen.
Live long and pros healthy,
Martin
Hallo Der,
Benutzerdefinierte Symbolleisten
Kannst Du deren Inhalt aus dem Netz laden? Oder muss sich die jeder selbst einrichten und pflegen?
Rolf
Hallo,
Benutzerdefinierte Symbolleisten
Kannst Du deren Inhalt aus dem Netz laden?
im Prinzip ja. Die benutzerdefinierte Symbolleiste wird ja im Filesystem durch ein frei wählbares Verzeichnis repräsentiert. Das kann auch ein Share auf einem Server sein.
Oder muss sich die jeder selbst einrichten und pflegen?
Das war vermutlich die ursprüngliche Idee von MS. Aber es geht auch anders.
Live long and pros healthy,
Martin
Moin,
Es gibt eine Anwendung die es Übernimmt, https://www.webrunapps.com/ da würde jeder Browser funktionieren, aber in der Whitelist kann man nur EXE Pfade anlegen. Zum öffnen von Ordner oder Batch Dateien funktioniert das nicht.
der Hersteller verrät zwar nicht, was er genau macht, aber ich vermute, dass die in Windows einen Protokoll-Handler für ihre Software registrieren, die dann die konkreten Aktionen ausführt. Das ist im Grunde gar nicht so schwierig, wenn ich mich richtig erinnere.
Wir brauchen eine Linksammlung für Produktionsmitarbeiter damit die Programme und Tools einfach gestartet werden können, ohne zu wissen wo das Programm eigentlich abgelegt ist.
Wenn ich den Pfad zu einer Ressource angebe, weiß ich doch genau, wo die sich befindet. Oder meinst du mit dem „Nichtwissen“ etwas Nebulöses, eine „Cloud“? Web-Anwendungen wären für den Einsatzzweck ja auch denkbar.
Viele Grüße
Robert
Hallo Robert,
Wenn ich den Pfad zu einer Ressource angebe, weiß ich doch genau, wo die sich befindet.
Ich denke, da sind siebenunddrölfzig Tools für bestimmte Zwecke hinterlegt. Handgemachte, gekaufte, lokal installierte, im Intranet herumfliegende. Vielleicht wird über die Webseite auch ein Workflow gesteuert - Du musst JETZT Excel öffnen und das Formular wtf3.xlsm ausfüllen.
Da ist's schon praktisch, wenn man nur einmal klicken muss.
Wobei - Chrome quittiert jeden URL Handler Aufruf mit einer Rückfrage "WILLST DU DAS WIRKLICH?" Die Checkbox, mit der man das für immer erlauben kann, wurde entfernt; sie kann nur mit einer Gruppenrichtlinie reaktiviert werden, entweder indem man die passende ADMX Datei von Google bezieht und es im GPEDIT einträgt, oder indem man es direkt in der Registry vermerkt.
Wenn man die Checkbox erstmal gesetzt hat, bekommt man sie, nach allem was ich rausfinden konnte, nur durch ein manuelles Editieren der Preferences-Datei von Chrome wieder weg (im AppData\Local\Google\Chrome\User Data-Ordner ). Da muss man nach allowed_origin_protocol_pairs suchen und dann Mut haben. Dokumentiert oder über UI änderbar scheint das nicht zu sein.
Rolf
Hallo stefantaust,
https://www.webrunapps.com/
Vorsicht beim Einsatz eines solchen Tool. Ohne Whitelist reißt Du Dir ein Sicherheits-Scheunentor auf.
Dass Du nur EXEs whitelisten kannst, liegt daran, dass man nur EXEs ausführen kann. Für alles andere braucht man ein EXE, das es verarbeitet. Ein Script braucht den Kommandoprozessor.
In der Anleitung steht, wie man es macht:
cmd.exe /c x:\foo\bar\myscript.cmd
Hintergrundinfo: Was macht WebRunApps
Das steht bei MS zwar in der Beschreibung des Internet Explorers, aber es geht bspw. auch in Chrome - wobei ich gelernt habe, dass man in Chrome Strg+Enter drücken muss, wenn man (bspw zum Testen) ein custom URI scheme in der Adresszeile benutzt.
D.h. das Hexenwerk ist nicht, ein Programm anzustoßen. Das Hexenwerk besteht darin, sich kein Einfallstor für Schädlinge zu öffnen, denn dieser Handler für custom URI kann von jedem verwendet werden, von eurem Sharepoint bis hin zu i_rip_you_off.ru (Phantasie-URL). Du kannst den Zugang zum Handler das nicht für bestimmte Webseiten festlegen. Und auch der Handler selbst weiß nicht, welche Webseite ihn nutzen möchte.
Das mag bei einem Asynchronous Pluggable Protocol anders sein, aber das ist sehr eng am Internet Explorer und ich habe keine Ahnung, wie andere Browser es unterstützen.
So einen Handler kann man übrigens auch selbst schreiben. Man kann ihn sogar als CMD Datei schreiben, wenn man
C:\windows\system32\cmd.exe /c C:\dings\webrun.cmd "%1"
als command einträgt. Statt in C:\dings kann das urlhandler.cmd natürlich auch in \192.1.2.3\daten\urlhandler\webrun.cmd stehen
So ein webrun.cmd könnte minimal so aussehen:
echo URL: %1
pause
Wenn Du ein custom URI Scheme stefan registrierst hast, machst Du einen Link auf "stefan:hallo", klickst ihn, der Browser fragt ob Du den Befehlszeilenprozessor öffnen willst, und dann siehst Du
URL: stefan:hallo
Zum Fortsetzen eine Taste drücken
Den Inhalt von %1 kannst Du nun nach Belieben interpretieren und Programme starten. Ich würde empfehlen, hier nur bestimmte Schlüsselwörter zuzulassen und keine beliebigen Programmnamen. Ein unbekanntes Schlüsselwort tut dann einfach nichts. Damit hast Du das Whitelisting erledigt.
Vorsicht mit Leerstellen in URLs. Aus IE und Chrome kommt für ein Space ein %20 im URLHandler an. Aber der Firefox setzt das in eine Leerstelle um. MS warnt davor, Leerstellen und Prozentzeichen an URL Handler zu übergeben. Es löst Chaos aus.
Rolf
Moin,
Vorsicht mit Leerstellen in URLs. Aus IE und Chrome kommt für ein Space ein %20 im URLHandler an. Aber der Firefox setzt das in eine Leerstelle um. MS warnt davor, Leerstellen und Prozentzeichen an URL Handler zu übergeben. Es löst Chaos aus.
Und es ist natürlich wichtig, die Anführungszeichen um die Argumente zu haben – wie du geschrieben hast:
"%1"
Viele Grüße
Robert