effel: nodejs Aufruf Windowsfenster ,Browserfenster mit Electron

Hallo,

ich habe schon oft Hilfe bei Euch gefunden...

Ich programmiere in Node.js (Javascript)

Gib es eine Möglichkeit aus node.js heraus ein Browserfenster zu öffnen? ..ohne über den Server zu gehen? ..evt mit Electron (soll ein node-modul sein)

Mir sind die "inneren" Vorgänge ist ganz klar.

Danke und frd.Grüße

effel

  1. Hi,

    ich habe schon oft Hilfe bei Euch gefunden...

    ja, das ist ja schön. Aber kein Grund, mit diesem Beitrag gleich zwei identische neue Threads aufzumachen. Ich habe den zweiten daher gelöscht.

    Ich programmiere in Node.js (Javascript)

    Da kann ich dir leider nicht mit konstruktiven Antworten dienen.

    ..evt mit Electron (soll ein node-modul sein)

    Viel mehr als das. Electron ist ein plattformübergreifendes Browser-Framework für Webanwendungen. Microsoft Teams ist zum Beispiel auf Electron aufgebaut. Visual Studio Code meines Wissens auch.

    Einen schönen Tag noch
     Martin

    --
    Kaffee ist nur schädlich, wenn Ihnen ein ganzer Sack aus dem 5. Stock auf den Kopf fällt.
  2. Hallo effel,

    Gib es eine Möglichkeit aus node.js heraus ein Browserfenster zu öffnen? Ohne über den Server zu gehen?

    Diese Frage ist unlogisch. Wenn Du aus node.js heraus ein Browserfenster öffnen willst, dann bist Du schon am Server.

    Mir sind die "inneren" Vorgänge ist ganz klar.

    Offensichtlich.

    Wenn man JavaScript im Browser und JavaScript in einem node.js Server verwendet, kann man schon einmal mit den Möglichkeiten in Verwirrung geraten. Aus Sicht des Browsers ist es komplett wurscht, ob der Server in node.js, PHP, Java, Lisp oder COBOL implementiert ist. Es ist eine fremde Maschine, und er redet mit ihr über das HTTP Protokoll.

    Konsequenz: Ein Server kann im Browser keine beliebigen Aktivitäten auslösen. Das gibt das HTTP Protokoll nicht her. Der Server kann auf eine HTTP Anfrage eine HTTP Antwort schicken, und eventuell läuft im Browser JavaScript, das diese Antwort interpretiert und dann Dinge tut. Dieses JavaScript musst Du dann aber selbst schreiben.

    Eine weitere Möglichkeit - gerade bei node.js - ist, dass das JavaScript auf deiner Webseite einen WebSocket öffnet und der Node-Server über diesen WebSocket Kommandos schickt. Dein JavaScript kann dann auf diese Kommandis hin dann Dinge tun, soweit der Browser das zulässt. Du kannst - wenn Du willst - sogar ein RPC[1]-Protokoll implementieren, worüber Du vom Browser Funktionen am Server aufrufen kannst oder umgekehrt. Aber: das alles ist asynchron und wird am Ende des Tages der Leitung durch Nachrichten auf einer Netzwerkverbindung realisiert. Browser und Server teilen sich keinen Speicher, und so etwas wie "rufe eine Funktion auf und warte auf ihren Rückgabewert" gibt es nur indirekt über Ereignisse oder Promises.

    Im Browser ist es so: ob WebSocket-Nachricht oder Eintreffen einer HTTP Antwort - beides sind JavaScript-Tasks, die vom Netzwerk erzeugt wurden und nicht aus einer Benutzerinteraktion heraus entstehen. Solche Tasks sind in ihren Möglichkeiten eingeschränkt. Das Öffnen von Fenstern ist beispielsweise verboten. Wenn Du vor 20 Jahren mal von einer Website heimgesucht wurdest, deren erste Aktion darin bestand, in einer Endlosschleife Fenster mit Werbeseiten zu öffnen, dann weißt Du, warum das so ist.

    Was möglich ist, ist das Einblenden von HTML Elementen - beispielsweise ein <dialog> Element. Damit kannst Du so etwas wie eine Bestätigungsabfrage durchführen.

    Rolf

    --
    sumpsi - posui - obstruxi

    1. Remote Procedure Call ↩︎

    1. Wenn Du aus node.js heraus ein Browserfenster öffnen willst, dann bist Du schon am Server.

      Das ist nicht zwingend der Fall. Er kann mit nodejs einen HTTP[S]-Server starten - er kann es aber auch einfach als „universelle“ Skriptsprache auf einen Desktop-Rechner benutzen. (Ich mach sowas gerne mal auf die Schnelle mit PHP…)

      Und da hätten wir dann den Fall, dass vermittels der exec-Funktion durchaus auch ein Browser gestartet werden kann.

      https://stackabuse.com/executing-shell-commands-with-node-js/

      Hint:

      Für bekannte Systeme kann man den Pfad zum Browser angeben, ihn oder einen zu suchen geht sicher auch, z.B. in dem man durch weitere Systemaufrufe untersucht, womit https:// - Links verknüpft sind. Im Zweifelsfall sollte der Benutzer den Pfad zum Browser und ggf. die Übergabe einer zu öffnenden URL konfigurieren können.

      1. Hallo Raketenwilli,

        hm - stimmt. Node muss nicht als Server agieren. Unter Windows kann ich einer Extension auch ein Defaultprogramm zuordnen, wenn ich "hallo.html" starte, läuft der Standardbrowser los und zeigt die Datei an.

        Effel müsste also mal sein Vorhaben näher erläutern.

        Rolf

        --
        sumpsi - posui - obstruxi
        1. Effel müsste also mal sein Vorhaben näher erläutern.

          Ja. Zumal in der Dok des in der Überschrift erwähnte Frameworks „Electron“ das Wort „Browser“ sehr explizit benutzt wird:

          1. Hallo Raketenwilli,

            vor allem wird dies erwähnt:

            Electron is a framework for building desktop applications using JavaScript, HTML, and CSS.

            D.h. das ist node.js als Runtime und Chromium zum Darstellen von HTML+CSS+JS als Multiplattform-Application. Nette Idee.

            Ich bin frei von jeglicher Ahnung zu diesem Tool und kann dem TO nur empfehlen, das Handbuch zu lesen.

            Rolf

            --
            sumpsi - posui - obstruxi
            1. Ich bin frei von jeglicher Ahnung zu diesem Tool und kann dem TO nur empfehlen, das Handbuch zu lesen.

              Jepp. Geht mir nicht anders.

    2. Danke,

      ich werde das intensiv studieren und lernen

      effel

      1. Effel müsste also mal sein Vorhaben näher erläutern.

        In node errechne ich rechtwinklige Dreiecke auf Basis des GoldenSchnitt und suche eine Möglichkeit der visuelle Darstelung. SVG scheoint die beste Möglichkeit zu sein, jedoch läuft SVG im Browser. Deshalb der Versuch, direkt aus node ein Browser aufzurufen und für die visuelle Darstellung zu nutzen.

        Es geht wahrscheinlich nur über eine Server.

        Effel

        1. Hallo effel,

          Wie machst Du das mit Node?

          Startest Du dein Node-Programm über die Kommandozeile? Unter Windows? Unter Linux?

          Warum machst Du das mit Node? Du könntest das betreffende Script auch in eine HTML Seite einbetten und im Browser laufen lassen und direkt die Dreiecke als Polygone einem SVG Element hinzufügen. Da ist's egal, ob es Chromium mit der V8 Engine ist (die auch in Node steckt), oder Firefox oder Safari. Die sollten für deine Zwecke ebenfalls genug können und das Script darin debuggt man mit den Entwicklertools sehr angenehm.

          Aber wie auch immer. Wenn Du ein SVG erzeugst, könntest Du es in eine temporäre Datei schreiben und dann einfach einen Betriebssystemprozess für das Browserprogramm starten. Den Dateinamen übergibst Du als Parameter. Alle Browser haben einen umfangreichen Satz an Aufrufparametern, Tante Google und Onkel Bing kennen sich da aus.

          Unter Windows kannst Du auch einfach direkt das SVG "starten". Windows assoziert damit dann das Standardprogramm für SVGs, und das ist oft genug der Defaultbrowser.

          Rolf

          --
          sumpsi - posui - obstruxi
          1. erstmal danke!

            ich überlege es mir!

            Effel

          2. Guten morgen Effel,

            In node errechne ich rechtwinklige Dreiecke auf Basis des GoldenSchnitt und suche eine Möglichkeit der visuelle Darstelung. SVG scheoint die beste Möglichkeit zu sein, jedoch läuft SVG im Browser. Deshalb der Versuch, direkt aus node ein Browser aufzurufen und für die visuelle Darstellung zu nutzen.

            Wie machst Du das mit Node?

            Startest Du dein Node-Programm über die Kommandozeile? Unter Windows? Unter Linux?

            Ah, die Kommandozeile - die hatte fast schon ich verdrängt.

            Ich weiß immer noch nicht genau, was du willst, glaube aber, dass Du den Begriff Server falsch verwendest.


            Lass mich aber erst einen Exkurs über meine Computererfahrungen loswerden.[1]

            Mein erster Computer war ein IBM XT mit MS-Dos. Da ging alles über DOS-Befehle wie DIR <C:\Pfad\zum\Verzeichnis .

            Nach ersten Erfahrungen mit TurboPascal in der Schule lernte ich dann
            dBase kennen. Dort konnte man mit Unicode-Zeichen rudimentäre GUIs erstellen:

            Screenshot GUI in dBase

            Diese Programme wurden dann in eine .exe-Datei kompiliert und konnten so nicht mehr durch Nutzer/Käufer verändert werden.

            Natürlich kann man mit VisualBasic, C und seinen Verwandten heute noch eigene Programme für Windows (oder andere Betriebssysteme) schreiben.

            Bis jetzt würde ich nie von einem Server sprechen.

            Interessant wird es, wenn man ein eigenes Programm für eine Wetterstation mit meinem Raspberry haben will. Es soll die Sensoren überwachen und Daten holen und speichern; die Ausgabe will ich aber nicht auf einem kleinen OLED-Display , sondern auf meinem Handy, Bürorechner etc. überall sehen können.

            Und da kommt eben das Client-Server-Modell ins Spiel. Der Raspberry ist mein ''headless server''; der eine Webseite mit HTML erzeugt.

            Doppelter Vorteil:

            • Viele GUI-Elemente wie Eingabefelder, Radio-Buttons und Menüs sind als native HTML-Elemente schon vorhanden - ich spare mir die Programmierung!
            • HTML läuft auf allen Systemen!

            In node errechne ich rechtwinklige Dreiecke auf Basis des GoldenSchnitt und suche eine Möglichkeit der visuelle Darstelung. SVG scheoint die beste Möglichkeit zu sein, jedoch läuft SVG im Browser. Deshalb der Versuch, direkt aus node ein Browser aufzurufen und für die visuelle Darstellung zu nutzen.

            Welche Daten hattest Du denn ohne Browser ausgegeben - und wie?

            Warum machst Du das mit Node? Du könntest das betreffende Script auch in eine HTML Seite einbetten und im Browser laufen lassen und direkt die Dreiecke als Polygone einem SVG Element hinzufügen. Da ist's egal, ob es Chromium mit der V8 Engine ist (die auch in Node steckt), oder Firefox oder Safari. Die sollten für deine Zwecke ebenfalls genug können und das Script darin debuggt man mit den Entwicklertools sehr angenehm.

            Genau!

            Aber wie auch immer. Wenn Du ein SVG erzeugst, könntest Du es in eine temporäre Datei schreiben und dann einfach einen Betriebssystemprozess für das Browserprogramm starten. Den Dateinamen übergibst Du als Parameter. Alle Browser haben einen umfangreichen Satz an Aufrufparametern, Tante Google und Onkel Bing kennen sich da aus.

            Unter Windows kannst Du auch einfach direkt das SVG "starten". Windows assoziert damit dann das Standardprogramm für SVGs, und das ist oft genug der Defaultbrowser.

            Ja, aber noch einfacher ist es eben MathML und SVG in den Browser zu integrieren.

            MathML/Geometrie mit MathML, SVG und JavaScript

            Wie es der Zufall so will, ist das erste Beispiel unseres neuen Geometrie-Tutorials ein Beispiel, in dem ein SVG mit dem goldenen Schnitt vorkommt.

            Im zweiten (noch nicht vorhandenen) Beispiel will ich die drei Punkte eines SVG-Dreiecks frei verschiebbar (Drag&Drop) machen, und dann die Grafik und die jeweiligen Innenwinkel und Seitenlängen dynamisch aktualisieren, bzw. berechnen.


            Im Wiki komme ich mir oft vor, wie jemand, der eine Lösung hat und nun ein passendes Problem sucht.

            Wenn Du mehr (auch per PN) erzählst, könnte man das evtl. im Wiki verwerten.

            Herzliche Grüße

            Matthias Scharwies

            --
            Ich habe heute rausgefunden, dass in das Pizzafach meines Rucksacks auch ein Laptop passt!

            1. Der Artikel kann evtl. irgendwann ins Wiki, aber wohin?? zu den Web-Apps? → Dort ist eigentlich schon genug Text; evtl. zu Datenvisualisierung oder als Begründung, warum man einen SmartHome/ Raspberry-Abschnitt aufbauen will. ↩︎