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
Remote Procedure Call ↩︎