![]() |
Kommunikation zwischen Web-Browser und Delphi-Programm
Hallo,
folgende Ausgangslage: Wir haben hier mehrere mySQL-Datenbanken, die auf einem Server laufen. Die User-Interfaces laufen alle über php auf einem Web-Browser (z.B. Firefox). Jetzt ist es notwendig, bestimmte Operationen auf den Clients selbst zu machen (z.B. Scannen, Faxen, Drucken, Dateien auf einem Fileserver sortieren, Dateien zum Bearbeiten öffnen ...) Auf die Clients kann ich mittels php - jedenfalls nicht ohne Tricks und MS ActiveX - nicht zugreifen. Das ist auch nicht mein Ziel. Es gibt deshalb derzeit mehrere kleine Delphi-Programme, die über ![]() meine Idee: Ich lasse mir die Befehle mittels php über den Browser ausgeben. Z.B. würde ein ".../aktion/?#oeffne=Y:\Texte\2567\Schreiben%20an%20Delphi-Praxis.odt" in der URL meinem Programm den Befehl geben, die Datei zu öffnen. meine Probleme: Momentan lösche ich meine Steuerdatei einfach, wenn die Aktion ausgeführt wurde. Es gab also keine doppelten Aktionen. Solange die URL so lautet, würde ich dann unentwegt die Datei (mehrfacj) öffnen. Jetzt müsste ich aber z.B. die URL ändern können, ohne dass gleich das Fenster neu geladen wird. Das bekomme ich nicht hin. Außerdem lese ich im Moment die URL mittels eines Timers ![]() ![]() meine Fragen: Hat schon mal jemand eine lauffähige Lösung zu WWW_RegisterURLEcho gefunden? Falls ja, wo? Gibt es (ggf. auch in andere Richtungen) Ideen, wie ich das Kommunikationsproblem lösen kann? Wie gesagt: Das System steht und arbeitet. Ich möchte es nur ggf. schneller und effektiver haben. Gruß, Alex |
Re: Kommunikation zwischen Web-Browser und Delphi-Programm
Schon mal an AJAX gedacht? Der Client würde dabei im Hintergrund (d.h. ohne erneutes GET oder POST) laufend neue Daten vom Webserver abfragen können und dann per JavaScript Aktionen ausführen können - z.B. neue URL aufrufen, sobald der Server diese dem Client übermittelt.
Asynchronous JavaScript and XML ![]() |
Re: Kommunikation zwischen Web-Browser und Delphi-Programm
Es gibt auch die Möglichkeit sich ein eigenes Protokoll zu registrieren, Dann kannst du auf der Webseite Links setzen myapp://print?file=/some.pdf&option=42 Dieses Protokoll muss dem Client in der Registry bekannt gemacht werden. Bei klick auf einen solchen link würde dann dein Programm lokal gestartet und würde die URL als Parameter übergeben bekommen.
LG, Björn |
Re: Kommunikation zwischen Web-Browser und Delphi-Programm
Danke für die Antworten!
@mjustin Mein Kollege, der für die serverseitige Programmierung zuständig ist (php, html, java), hat Teile der Software auch mit AJAX programmiert. Ich verstehe Deinen Hinweis nicht; auch nach Lektüre des Links. Aber ich werde ihn mal ansprechen. Ich verstehe es so, dass es hauptsächlich darum geht, Seiten ohne den Server unmittelbar anzusprechen und ohne sie komplett neu zu lesen, zu verändern. Wie ich damit eine Kommunikation hinbekomme, erschließt sich mir nicht. Ich werde aber fragen. Zitat:
Entschuldigt die blöde Frage: Welche Suchbegriffe muss ich verwenden, um da etwas (auch zu Delphi) zu finden? Gruß, Alex |
Re: Kommunikation zwischen Web-Browser und Delphi-Programm
Den Source gabs mal im SwissDelphiCenter.
Aber noch ein Hinweis zum verwenden eines eigenes Protokolls: Ein Protokoll ist ein Sicherheits Risiko, ein Angreifer könnte einer Webseite soetwas plazieren ![]() Hier die Version die ich verwendet habe:
Delphi-Quellcode:
UOperatingSystem = class
public // [url]http://www.swissdelphicenter.ch/torry/showcode.php?id=2272[/url] /** * @param Name Bezeichnung des Protokolls z.B. http, ftp oder myone * @param Describtion Beschreibung z.B. MyCompany Protokoll zur einfachen Anzeige von xyz aus dem Browser * @param ExecuteStr Anwendung die gestartet werden soll, wichtig ist hier das %1 am Ende damit die URL auch übergeben wird z.B. 'C:\myone.exe %1' */ class procedure RegisterProtocol(const Name, Describtion, ExecuteStr: string); class procedure UnregisterProtocol(const Name: string); end; ... { UOperatingSystem } class procedure UOperatingSystem.RegisterProtocol(const Name, Describtion, ExecuteStr: string); var reg: TRegistry; begin reg := TRegistry.Create; try reg.RootKey := HKEY_CLASSES_ROOT; reg.OpenKey(Name, True); try reg.Writestring('', 'URL:' + Name +' (' + Describtion + ')'); reg.WriteInteger('EditFlags', 2); reg.WriteString('Source Filter', ''); reg.WriteString('URL Protocol', ''); reg.OpenKey('shell', True); reg.OpenKey('open', True); reg.OpenKey('command', True); reg.Writestring('', ExecuteStr); finally reg.CloseKey; end; finally reg.Free; end; end; class procedure UOperatingSystem.UnregisterProtocol(const Name: string); var reg: TRegistry; begin reg := TRegistry.Create; try reg.RootKey := HKEY_CLASSES_ROOT; reg.DeleteKey(Name); finally reg.Free; end; end; |
Re: Kommunikation zwischen Web-Browser und Delphi-Programm
Danke für den Code! Der läuft super!
Ich habe aber 3 Fragen zum Token: (1) Wie erstelle ich einen Token, (2) wie synchronisiere ich ihn zwischen dem Server und dem Client und (3) kann ich in meinem konkreten Fall nicht darauf verzichten? Mein Plan sieht im Moment so aus, dass ich als Parameter (quasi wie bisher) die Steuerdatei übergeben lasse. Evtl. reicht das ja zur Sicherheit. Außerdem formatiert mein Programm nicht die Festplatte und löscht grundsätzlich nichts. Letzteres macht der php-Code auf dem Server. Die Frage mit dem Token würde mich aber trotzdem interessieren ... Gruß & Dank, Alex |
Re: Kommunikation zwischen Web-Browser und Delphi-Programm
(1) Ein Zufallszahl sollte ausreichen
(2) Das Clientprogramm schickt einen http-Request an den Server, der Server antwortet ob der Token gültig ist oder nicht. Näturlich sollte der Token täglich (oder öfters) geändert werden. Im Falle eines ungültigen Tokens sollte dann eine Warnmeldung kommen. (3) Wenn du darauf verzichtest hast du ein potenzielles Sicherheitsproblem, wie kritisch das ist kann ich nicht beurteilen. Natürlich benötigt man für die Ausnutzung internes Wissen (mindestens den Protokollnamen und einige Befehle). Wie sicher du deine Software gestaltest bleibt natürlich dir überlassen. Wenn du nur den Namen der Steuerdatei übergibst hast du natürlich dadurch die Sicherheit das nur vom Server erstellte befehle ausgeführt werden können (es sei den man kann sowas machen myone://execute?url=http://evil_url_that_load_something_bad) Gruß Björn |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz