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 :

Clic automatique sur un input de type file (sur Chrome)


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2019
    Messages : 4
    Par défaut Clic automatique sur un input de type file (sur Chrome)
    Bonjour,

    Après de multiples recherches je n'arrive pas à trouver ce que je recherche
    Si quelqu'un trouve une solution ce sera mon sauveur

    Dans ma page html j'ai un input :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <body onload="cliquer()">
    <input type='file' id='test'>
    </body>

    Mon objectif est très simple mais à cause de la sécurité mise en place par Chrome cela paraît impossible (mais rien n'est impossible en informatique n'est-ce pas ? ) :
    Je veux qu'à la fin du chargement de la page un script JavaScript simule un clic sur l'input de la page web (et donc sans aucune action de la part de l'utilisateur !)

    J'ai donc tout bonnement essayé ce code :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function cliquer() {
    	document.getElementById("test").click();
    }

    Il fonctionne sur Internet Explorer et sur Mozilla Firefox, Chrome me tire la langue et ne veut rien entendre..

    J'ai donc vu un topic qui demande d'utiliser jQuery, ce que j'ai fait :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $(document).ready(function() 
    {
    	$('#test').trigger('click').click();
    });

    Toujours aucun résultat..
    Pourtant la fonction click() fonctionne bien, je l'avais testé sur un élément
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type='radio' id='test2'>
    Et là en appliquant les deux méthodes précédentes le radio button est bien sélectionné à la fin du chargement de la page.

    Merci à celui qui se penchera de plus près sur mon problème !

    Bonne journée

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut


    Normalement, il suffit de provoquer un clic, mais c'est impossible pour raison de sécurité !
    La boîte de dialogue du sélecteur de fichier ne peut être affichée qu'avec une activation de l'utilisateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    window.addEventListener('load', ev => {
        // le DOM est construit et la page web est visible
     
        // début code du test
     
        document.querySelector('#test').click();
     
        // fin code du test
    }, {
        capture: false,
        passive: true,
        once: false
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2019
    Messages : 4
    Par défaut
    Hey

    Merci de t'être penché sur mon problème !

    Normalement, il suffit de provoquer un clic, mais c'est impossible pour raison de sécurité !
    La boîte de dialogue du sélecteur de fichier ne peut être affichée qu'avec une activation de l'utilisateur.
    C'est vraiment frustrant car sur Firefox et IE cela est tout à fait possible ^^'

    Le code que tu m'as proposé ne résout malheureusement pas le soucis.

    Par contre je suis tombé sur un lien très intéressant puisqu'il reproduit à la lettre ce que je recherche :
    https://jsfiddle.net/0L794s53/1/

    Lorsque la page a chargé, la boîte de sélection d'un fichier s'ouvre sans aucune action de ma part !

    Ici l'explication associée (LinusBorg):
    https://github.com/vuejs/vue/issues/7028

    Je t'avoue que je n'ai pas très bien compris la démarche ^^'

    Il faudrait donc que je passe par le framework Vue.js pour faire des bidouilles sur les éléments graphiques de la page ?


    Bonne journée danielhagnoul

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,
    Citation Envoyé par CrazyGeekMan Voir le message
    Par contre je suis tombé sur un lien très intéressant puisqu'il reproduit à la lettre ce que je recherche :
    https://jsfiddle.net/0L794s53/1/
    J'ai eu la même idée (utiliser la fonction setTimeout) mais sur Chrome cela ne fonctionnait toujours pas...

    PS : Je pense que le code en question n'a rien à voir avec Vue.js, c'est juste que la fonction setTimeout est utilisée pour déclencher le clique un certain temps (1000ms) après le chargement du script... Je pense que ce code est justement un exemple sans Vue.js pour mettre en évidence le problème avec Chrome...

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2019
    Messages : 4
    Par défaut
    Salut à toi Beginner. !

    Citation Envoyé par Beginner.
    J'ai eu la même idée (utiliser la fonction setTimeout) mais sur Chrome cela ne fonctionnait toujours pas...
    Ce lien en question m'intrigue puisqu'il ouvre l'explorateur de fichier de façon complètement aléatoire sur Chrome !

    https://jsfiddle.net/0L794s53/1/

    Essaie de cliquer dessus, si rien ne se passe appuie 2 ou 3 fois sur f5
    Si toujours rien ferme l'onglet et réessaie encore
    Tu verra qu'à un moment donné le click() fonctionnera.. (je n'ai aucune explication à ça.. ?)

    Limite si ça ne marche pas de ton côté je suis prêt à enregistrer mon écran pour te prouver que l'explorateur s'ouvre !

    Bonne journée

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Salut,

    Chez moi cela ne fonctionne même pas avec Firefox. Tu devrais changer de stratégie. Pourquoi veux-tu faire cela, quel est l'intérêt ? S'il y a une raison pratique que tu ne nous a pas indiquée dis-là nous, on trouvera certainement des moyens de t'aider, mais tel quel, sur un onload tu risque de chercher longtemps pour rien.

    Au passage pour jQuery ce serait plutôt $('#test').trigger('click'); mais cela ne changera rien dans ton cas, car c'est le onload qui pose problème pour un input de type file.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2019
    Messages : 4
    Par défaut
    Salut ,

    Tu dois sans doute avoir raison, je ferai mieux de vous expliquer l'intérêt de cette solution.

    Je développe actuellement une application sous Unity en C# qui doit être déployable au format WebGL.
    Je ne touche donc pas directement au JavaScript (j'ai donné l'exemple de onload pour simplifier la question et les éventuelles réponses).
    Pour écrire du code JavaScript je passe par un plugin .jslib, Unity arrive par ce biais à interpréter du JS depuis du code C#.
    Voici une page expliquant la situation :
    https://docs.unity3d.com/Manual/webg...scripting.html

    J'ai donc une interface utilisateur codée en C#, dès que l'utilisateur clique sur le bouton adéquat, du code JS est lancé.
    Dans mon code le JS crée un input file puis clique sur celui-ci automatiquement pour demander à l'utilisateur la sélection d'un fichier.

    Quelle pourrait être la stratégie alternative ?
    J'ai pensé à créer un bouton avec JS pour cliquer sur l'input mais esthétiquement et fonctionnellement parlant je trouve ça vraiment déplorable (deux clics de l'utilisateur pour aboutir à un résultat).

    Citation Envoyé par ABCIWEB
    c'est le onload qui pose problème pour un input de type file.
    Je t'assure que le problème c'est la fonction click() depuis un élément input file, j'ai effectué plusieurs tests et click() fonctionnement bien avec un button par exemple.

    Merci de bien vouloir m'aider à résoudre ce problème

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    A mon avis le problème vient du fait que tu crée l'input de type file dynamiquement et que tu simules un click dessus en même temps. Il faut séparer la création de l'input par rapport au click sur cet input, on ne peut pas faire les deux en même temps. Une solution serait de créer un input de type file caché au chargement de la page, pour pouvoir ensuite simuler un click dessus.

    Par exemple vite fait avec jQuery :
    Code html : 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
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <meta charset="UTF-8">
    <meta name=viewport content="width=device-width, initial-scale=1">
    <title></title>
    <meta name="Description" content = "">
    <script src="Scripts/jquery.js"></script>
    <script>
    $(function() 
    {
            // Au chargement de la page je crée un input type file caché
            $('body').append($('<input type="file" id="filehidden" style="display:none">'));
            
            // Définition du comportement du boutton id = buttonfilehidden
            $('#buttonfilehidden').on('click',function(){
                    $('#filehidden').click();
            });
    })
    </script>
    </head>
    <body>
    <input type='button' id='buttonfilehidden' value="test">
    </body>
    </html>

Discussions similaires

  1. Input de type File sans le champ ?
    Par DemonKN dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 11/02/2010, 13h59
  2. styler un input de type file
    Par Methode dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 11/01/2007, 23h11
  3. createElement input de type file : pb d'upload de fichier
    Par firejocker dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 16/02/2006, 14h08
  4. Pb avec un input de type file
    Par stecos dans le forum Langage
    Réponses: 1
    Dernier message: 25/10/2005, 10h03
  5. chemin d'un input de type file
    Par sbbn1 dans le forum ASP
    Réponses: 2
    Dernier message: 05/04/2004, 20h19

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