IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Sélectionner un dossier avec showDirectoryPicker


Sujet :

JavaScript

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 288
    Points : 242
    Points
    242
    Par défaut Sélectionner un dossier avec showDirectoryPicker
    Bonjour,

    j'aimerai afficher sur un texte le répertoire en sélectionner un dossier sur le bureau.

    mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    async function GetDir() {
    	try {
    		const dirHandle = await window.showDirectoryPicker({startIn: 'desktop'});
            if(dirHandle) {
    			document.getElementById("Folder").value = dirHandle;
    		}
    	} catch (error) {
    		alert('Erreur lors de la sélection du répertoire.');
    	}
    }
     
    document.getElementById('FolderButton').addEventListener("click", GetDir);
    il m'afficher un erreur lors de la sélection du répertoire dans alert. comment puis-je faire pour pour sélectionner un dossier en afficher son répertoire dans un texte qui s'appelle dans Folder?

  2. #2
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 458
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 458
    Points : 4 615
    Points
    4 615
    Par défaut
    developer.mozilla.org/en-US/docs/Web/API/Window/showDirectoryPicker d'apres la doc, ce n'est valable qu'en HTTPS, et surtout... c'est exeperimental, uniquement supporte par chrome.

    sinon, je te conseil de passer par des console.log() et non des alert() pour debugger.

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const dirHandle = await window.showDirectoryPicker();
    console.log(dirHandle); // FileSystemDirectoryHandle {kind: 'directory', name: 'test'}
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 288
    Points : 242
    Points
    242
    Par défaut
    bonjour Doksuri,

    merci d'avoir répondu. Voici ce que ça donne dans console.log :
    Nom : Capture d’écran 2024-05-12 223655.png
Affichages : 79
Taille : 7,2 Ko

    avez-vous une solution pour sélectionner le dossier en affichent le répertoire du dossier dans un texte?

  4. #4
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 458
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 458
    Points : 4 615
    Points
    4 615
    Par défaut
    je vois dans ton screenshot, que tu utilises firefox ... ce n'est pas compatible firefox
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 288
    Points : 242
    Points
    242
    Par défaut
    je trouver un API qui fonctionne avec Firefox avec showDirectoryPicker.

    voici le code modifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    async function GetDir() {
    	const supportsFileSystemAccess = "showDirectoryPicker" in window && (() => {
    		try {
    			return window.self === window.top;
            } catch {
                return false;
            }
        })();
    	if (supportsFileSystemAccess) {
    		try {
    			const directoryHandle = await window.showDirectoryPicker({startIn: 'desktop'});
    			document.getElementById("Folder").value = directoryHandle.value
    		} catch (err) {
    			if (err.name !== "AbortError") {
    				alert(err.name, err.message);
    		    }
            }
    	    return directoryHandle;
        }
    	return new Promise((resolve) => {
        const input = document.createElement('input');
        input.type = 'directories';
        input.webkitdirectory = true;
        if ('showPicker' in HTMLInputElement.prototype) {
          input.showPicker();
        } else {
          input.click();
        }
      });
    }
    le lien du code original : https://web.dev/patterns/files/open-a-directory?hl=fr

    est-il possible d'avoir le nom destination du dossier dans un texte?

  6. #6
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 288
    Points : 242
    Points
    242
    Par défaut
    Bonsoir,

    j'avais trouver ceci aussi : https://github.com/nwutils/nw-progra...-folder-select

    le code ne fonctionne pas chez moi avec require.

    mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import { openFolderExplorer } from './folder-select/index.js';
     
    function callback(selection) {
      if (selection) {
        document.getElementById("Folder").value = selection;
      } else {
        alert('Vous avez annulé la destination du dossier.');
      }
    }
     
    function GetFolder() {
        openFolderExplorer(window, {directory: 'Desktop', title: 'Sélectionnez un dossier dans lequel stocker le fichier.'}, callback);
    }
    button :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('FolderButton').addEventListener("click", GetFolder);
    j'arrive pas à obtenir le application folder en sélectionnent le dossier. avez-vous une solution comment puis-je avoir le folder (voir image en dessous)?
    Nom : win.png
Affichages : 63
Taille : 6,7 Ko

  7. #7
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 288
    Points : 242
    Points
    242
    Par défaut
    Bonjour, j'ai trouver la solution à mon problème mais j'ai un message erreur :
    Uncaught SyntaxError: import declarations may only appear at top level of a module
    le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import { selectFolder } from './select-folder.js';
    le code select-folder.js :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    import { spawn } from 'child_process';
     
    const selectFolder = ({description, root, newFolderButton}) => `
      function selectFolder {
        [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
     
        $form = New-Object System.Windows.Forms.FolderBrowserDialog
        $form.showNewFolderButton = ${newFolderButton}
        $form.rootfolder = '${root}'
        $form.description = '${description}'
        $show = $form.showDialog()
        if ($show -eq "OK"){
          return $form.selectedPath
        } else {
          write-error "cancelled"
        }
      }
     
      $folder = selectFolder
      write-host $folder
    `;
     
    /**
     * @param {string} [root='desktop'] - check [specialfolder](https://docs.microsoft.com/en-us/dotnet/api/system.environment.specialfolder?view=netframework-4.7.2) for more options
     * @param {string} [description='Select Folder'] - description
     * @param {boolean} [newFolderButton='true'] - show newFolderButton or not
     *
     * @return {Promise} selected folder or cancelled string
     */
    export default (options = {}, folder) => new Promise((resolve, reject) => {
      const {root = 'desktop', description = 'Select Folder', newFolderButton = 1} = options;
     
      const child = spawn('powershell.exe', [selectFolder({description, root, newFolderButton})]);
      child.stdout.on('data', data => {
        data = data.toString();
        if (data.length > 1) folder = data;
      });
      child.stderr.on('data', data => {
        data = data.toString();
        if (data.includes('cancelled')) resolve('cancelled');
        else reject(data);
      });
      child.on('exit', () => {
        resolve(folder)
      });
      child.stdin.end();
    })
    tous les infirmations folderbrowserdialog : https://github.com/VandeurenGlenn/wi...er/tree/master

    avez-vous une solution pour enlever le message erreur avec import { selectFolder } from './select-folder.js' ?

  8. #8
    Membre confirmé
    Homme Profil pro
    OoW
    Inscrit en
    Juin 2019
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Ukraine

    Informations professionnelles :
    Activité : OoW

    Informations forums :
    Inscription : Juin 2019
    Messages : 136
    Points : 481
    Points
    481
    Par défaut
    \ô/
    Bonjour, j'ai trouver la solution à mon problème mais j'ai un message erreur :
    Uncaught SyntaxError: import declarations may only appear at top level of a module
    comme tu utilises les directives import/export il te faut déclarer tes scripts avec le type="module".

    Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <script type="module" src="nom-fichier-module.js"></script>
    <script type="module">
    import {ma_variable} from "./nom-fichier-module.js" ;
    // utilisation de ma_variable
    </script>

  9. #9
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 288
    Points : 242
    Points
    242
    Par défaut
    Bonsoir Dave Hiock,

    Avec plusieurs jours tentative que j'ai pas réussi de lancer folderbrowserdialog avec le fichier select-folder.js qui m'afficher une erreur mais le modification dans le html et popup toujours le mème message erreur.
    Uncaught SyntaxError: import declarations may only appear at top level of a module
    alors je l'ai refait dans le fichier popup.js mais il reconnais pas ce code car il m'affiche le mème erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    import { spawn } from 'child_process'; <= erreur
     
    function selectFolder(dest, tit, dos) {
    	const child = spawn('powershell.exe', [FolderBrowserDialog({dest, tit, dos})]);
        child.stdout.on('data', data => {
    		data = data.toString();
            if (data.length > 1) folder = data;
    	});
        child.stderr.on('data', data => {
    		data = data.toString();
            if(data.includes('cancelled')) {
    			resolve('cancelled');
    		} else {
    			reject(data);
    		}
        });
        child.on('exit', () => {
    		resolve(folder)
        });
        child.stdin.end();
    }
    comment puis-je lancer powershell dans le fichier popup.js car il reconnais pas ce code import { spawn } from 'child_process'; ?

Discussions similaires

  1. [XL-2003] selectionner un dossier et l'utiliser avec LookIn
    Par hidodu dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/01/2012, 14h41
  2. [JFileChooser] sélectionner un dossier
    Par hunter dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 20/05/2011, 17h23
  3. Doublons de dossier avec samba
    Par jesus144 dans le forum Réseau
    Réponses: 1
    Dernier message: 20/12/2005, 15h30
  4. Suivre un lien .lnk ou sortir du dossier avec cygwin
    Par ThanosT dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 01/10/2005, 10h57
  5. Réponses: 3
    Dernier message: 10/02/2005, 17h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo