document.cookie durch electron-cookies ersetzen - Wie genau ?

  • document.cookie durch electron-cookies ersetzen - Wie genau ?

    Moin moin,
    In letzter Zeit beschäftige ich mich ein wenig mit HTML, CSS & Javascript. Nun bin ich über das Javascript-Framework node.js gestoßen und habe mal versucht mit Electron eine kleine Desktop-App zu erstellen. Das hat auch alles wunderbar funktioniert. Nur jetzt stoße ich auf ein Problem wo ich einfach nicht weiter weiß.
    Ich habe 2 HTML-Datein und eine externe .js-Datei mit 2 Funktionen. In der ersten HTML-Seite rufe ich eine Funktion auf die die zweite HTML-Seite lädt. Dort rufe ich die zweite Funktion auf die den Wert bei jedem Funktionsaufruf um eins erhöhen soll. Hatte es erst mit globalen Variablen versucht, aber da bleibt der Wert immer auf 1. Habe es dann mit "document.cookie++" lösen können. Anschließend wird die Erste HTML-Seite wieder geladen und das Spiel beginnt von vorne:
    Erste HTML-Seite:

    Quellcode

    1. ...
    2. ...
    3. <input type="button" value ="Weiter" onClick="Funktion1()">
    4. ...
    5. ...


    Funktion1:

    Quellcode

    1. window.location="Zweite.html";

    Zweite HTML-Seite

    Quellcode

    1. ....
    2. ....
    3. body onload="Funktion2()">
    4. ...
    5. ...


    Funktion2:

    Quellcode

    1. document.cookie++;var x = document.cookie;
    2. alert(x);


    Das klappt auch alles wunderbar! Da die Browser-Cookies bei meiner Desktop-App nicht funktionieren, brauche ich dafür eine entsprechende Lösung. Bin dann im Internet auf electron-cookies gestoßén die man sich über "npm install electron-cookies" installieren kann. Soweit so gut, aber wie gehe ich jetzt weiter vor ? Die Codeschnippsel die ich im Netz gefnden habe, haben mir nicht so wirklich weiter gebracht. Könnte mir jemand step by step erklären WAS ich WO abändern müsste oder hinzufügen müsste, damit ich die Cookies über electron verwenden kann ? =) Falls es bei electon noch einfachere Möglichkeiten gäbe, bin ich dafür natürlich auch offen! Schönen Gruß! =)
  • Laut Dokumentation musst du das erwähnte Modul einfach über require('electron-cookies') in den Renderer-Prozess der Anwendung laden und fertig.

    Da das Modul jedoch zuletzt vor 2 Jahren aktualisiert wurde besteht durchaus auch die Möglichkeit dass es unter der aktuellen Electron- und/oder Node.js-Version nicht mehr oder nicht mehr richtig läuft, das müsstest du ggf. austesten. Wenn dem so sein sollte würde ich dir falls du keine sitzungsübergreifende Speicherung benötigst zu dem von Electron internen ses.cookies raten wie hier beschrieben, oder andernfalls zu electron-json-storage.

    Um genau zu zeigen was du bei den letzten beiden Möglichkeiten ändern müsstest, müsstest du noch deinen Code von der Electron-Anwendung selbst posten, sowie ob die Daten sitzungsübergreifend abgespeichert werden müssen.
    Grüße,
    NodeCode

    NodeCode.de
  • Vielen Dank erstmal für deine Antwort! Kure Frage: Was genau ist mit "Render-Prozess der Anwendung" gemeint ? Das mit dem

    Quellcode

    1. require('electron-cookies')
    hatte ich in meiner main.js und auch in einer Funktion die diese cookies verwenden soll drinnen stehen gehabt. Bin dann auch über sowas gestoßen

    Quellcode

    1. import ElectronCookies from '@exponent/electron-cookies';
    Aber die Inport-Anweisung hat bei mir nicht funktioniert (rot unterstrichen) und Anwendung ließ sich nicht öffnen. Na ja, du hast mir ja zwei Alternativen aufgezeigt, werde ich nachher mal testen =)
  • So habe das mit dem electron-json-storage mal versucht. Habe zunächste das benötigte Packet über

    Quellcode

    1. npm install --save electron-json-storage
    installiert.Anschließend einfach mal das Beispiel aus dem Link in Funktion2 reinkopiert und in meine index.js die Zeile

    Quellcode

    1. const storage = require('electron-json-storage')
    eingefügt.Jedoch gibt es da anscheinend irgendeinen Fehler, da dieses hier

    Quellcode

    1. window.location = "1.html"
    nicht mehr ausgeführt wird (ohne diesen Codeschnippsel schon).

    Funktion2

    Quellcode

    1. const storage = require('electron-json-storage');storage.set('foobar', { foo: 'bar' }, function(error) {if (error) throw error;});window.location="1.html";


    index.js_

    Quellcode

    1. const {app, BrowserWindow} = require('electron')const path=require('path');const url=require('url');const storage = require('electron-json-storage')var win;function [i]createWindow [/i]() { // Create the browser window.win = new BrowserWindow({width: 800, height: 600}) win.loadURL(url.format({pathname: path.[i]join[/i](__dirname, '1.html'),protocoll: 'file:',slashes: true}))}app.on('ready', [i]createWindow[/i])
    Ich kriege es nicht gebacken :/ Wäre um hilfe sehr dankbar. Schönen Gruß =)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Tito ()

  • Der Render-Prozess ist der Prozess der für die aufgerufene HTML-Seite zuständig ist, also nicht die main.js. Siehe dazu hier. require('electron-cookies') musst nur dort ausgeführt werden, wenn du das Modul zusätzlich noch in die main.js lädst funktioniert es nicht, da diese kein document besitzt und es somit zu einem Fehler kommt.

    Warum es mit electron-json-storage nicht funktioniert weiß ich hingegen leider nicht, evtl. zeigt dir der Debugger eine Fehlermeldung an.
    Grüße,
    NodeCode

    NodeCode.de
  • Tito schrieb:

    Hatte es erst mit globalen Variablen versucht, aber da bleibt der Wert immer auf 1.
    Meinst du mit globale Variable so was wie window.myStore = 0? Alles andere ist nämlich nur bedingt "global". Zudem gilt es noch die Trennung zwischen Main- und Renderprozess zu beachten.


    Tito schrieb:

    Habe es dann mit "document.cookie++" lösen können.
    Das soll funktioniert haben? Das ist alles andere als richtiger Umgang mit Cookies. Im Renderprozess kannst du mit der DOM API auf Cookies zugreifen. Im Mainprozess gibt es dafür ein eigenes Objekt.


    Tito schrieb:

    Aber die Inport-Anweisung hat bei mir nicht funktioniert (rot unterstrichen) und Anwendung ließ sich nicht öffnen.
    Das scheint ein spezielles Framework-Beispiel zu sein (z.B. Angular), da das '@' nicht zum Standard gehört. Wenn du noch nicht unterstützte Features (wie import), Typescript oder Ähnliches direkt verwenden willst, brauchst du eine spezielle Electron Version.


    Tito schrieb:

    const storage = require('electron-json-storage');storage.set('foobar', { foo: 'bar' }, function(error) {if (error) throw error;});window.location="1.html";
    Die window.location Zuweisung müsste eigentlich mit in den Callback.
    Die geworfenen Fehler wirst du nur in der Konsole sehen. Steht da was?


    PS: Hat schon mal einer von euch an die sessionStorage oder localStorage API gedacht? Die wird im Renderprozess nativ unterstützt.