Je veux savoir comment créer une page qui s'affiche une fois et ne s'affiche plus jamais, ou cochez la case "Ne plus jamais me montrer" comme le code de Visual Studio lorsque vous le lancez pour la première fois.

-1
Walplay Dev 17 mars 2019 à 06:12

2 réponses

Meilleure réponse

Le problème avec localStorage

Le problème est que lorsque l'application est supprimée, les données stockées à l'aide de localStorage peuvent continuer à persister

C:\Users\%USERNAME%\AppData\Roaming\Atom

Contient localDB, indexedDB et quelques autres éléments de cache

utiliser un autre moyen de conserver les données

Je pense que vous pouvez persister dans les données dans un fichier JSON ou dans n'importe quel texte de fichier de configuration, dans ce cas, créez un fichier json (dans n'importe quel chemin)

Javascript

const electron = require('electron');
const path = require('path');
const fs = require('fs');

class Store {
constructor(opts) {
    // Renderer process has to get `app` module via `remote`, whereas the main process can get it directly
    // app.getPath('userData') will return a string of the user's app data directory path.
    const userDataPath = (electron.app || electron.remote.app).getPath('userData');
    // We'll use the `configName` property to set the file name and path.join to bring it all together as a string
    this.path = path.join(userDataPath, opts.configName + '.json');

    this.data = parseDataFile(this.path, opts.defaults);
}

// This will just return the property on the `data` object
get(key) {
    return this.data[key];
}

// ...and this will set it
set(key, val) {
    this.data[key] = val;
    // Wait, I thought using the node.js' synchronous APIs was bad form?
    // We're not writing a server so there's not nearly the same IO demand on the process
    // Also if we used an async API and our app was quit before the asynchronous write had a chance to complete,
    // we might lose that data. Note that in a real app, we would try/catch this.
    fs.writeFileSync(this.path, JSON.stringify(this.data));
}
}

function parseDataFile(filePath, defaults) {
// We'll try/catch it in case the file doesn't exist yet, which will be the case on the first application run.
// `fs.readFileSync` will return a JSON string which we then parse into a Javascript object
try {
    return JSON.parse(fs.readFileSync(filePath));
} catch(error) {
    // if there was some kind of error, return the passed in defaults instead.
    return defaults;
}
}

// expose the class
module.exports = Store;

Le fichier est créé pour la première fois et là s'il a pu être validé si cette valeur existe dans le fichier de configuration

Javascript

const { app, BrowserWindow } = require('electron');
const path = require('path');
const Store = require('./store.js');
let mainWindow; //do this so that the window object doesn't get GC'd

// First instantiate the class
const store = new Store({
  configName: 'user-preferences',
  defaults: {
    initialLaunch: true
  }
});

Et obtenir cette valeur et la traiter

let { initialLaunch } = store.get('initialLaunch');
if(initialLaunch){
  //show initial config window
}else{
  //show other window
}
1
Herman Andres Figueroa 17 mars 2019 à 03:40

Vous pouvez utiliser localStorage:

//Place this code in your electron app's initialisation
if (localStorage.getItem("showStartUpWindow") == "No")  {
    //Show main window
} else {
    //Show startup window and wait until the "OK" button is clicked
    if (doNotShowStartUpWindowCheckBox.checked) {
        localStorage.setItem("showStartUpWindow", "No");
    }
}
2
Jack Bashford 17 mars 2019 à 03:20