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 :

Erreur : File chooser dialog can only be shown with a user activation


Sujet :

JavaScript

  1. #1
    Membre habitué Avatar de Gorzyne
    Profil pro
    Collégien
    Inscrit en
    Janvier 2008
    Messages
    337
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Janvier 2008
    Messages : 337
    Points : 125
    Points
    125
    Par défaut Erreur : File chooser dialog can only be shown with a user activation
    J'ai le script suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var bouton = document.querySelector("#upload-button");
    bouton.click();
    qui fonctionne très bien depuis la console du navigateur Edge

    mais qui ne donne rien quand je l'execute sur le navigateur depuis une application tierce (une appli de RPA maison avec laquelle les autres scripts sur la même page s'executent correctement)

    Dans la console il y a le message
    File chooser dialog can only be shown with a user activation.
    qui indique que cette action doit être effectuée par un utilisateur, il s'agit d'un bouton qui ouvre une fenêtre pop up de la comonfiledialog de Windows pour sélectionner un fichier

    est ce qu'il y aurait des façons de contourner cette limitation ?

    merci !
    Gorz!

  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 617
    Points
    4 617
    Par défaut
    il est possible que les navigateurs restreignent les inter-actions de scripts par mesure de securite.
    => comme tu lances ton code dans la console, tu as deja agit avec la page.

    pour s'assurer de ce comportement, essaye d'inter-agir reelement avec la page avant d'executer ton script (je ne sais pas comment fonctionne ton application)
    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 habitué Avatar de Gorzyne
    Profil pro
    Collégien
    Inscrit en
    Janvier 2008
    Messages
    337
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Janvier 2008
    Messages : 337
    Points : 125
    Points
    125
    Par défaut
    oui je peux interagir réellement avec la page c'est l'approche actuelle mais c'est plus fastidieux il faut calibrer la position et l'écran doit rester visible et ne peut être déplacé, et on immobilise le poste pendant l'opération
    j'avais eu un problème similaire sur une combobox j'avais réussi à récupérer le eventhandler react en bouclant sur les keys
    là j'ai essayé une approche similaire, j'arrive à récupérer le eventHandler lié au bouton ensuite je boucle sur les fonctions accessibles
    J'obtiens:
    Fonction accessible: onBlur
    Fonction accessible: onClick
    Fonction accessible: onFocus
    Fonction accessible: onKeyDown
    Fonction accessible: onKeyUp
    Fonction accessible: onMouseDown
    Fonction accessible: onMouseLeave
    Fonction accessible: onMouseUp
    Fonction accessible: onDragLeave
    Fonction accessible: onTouchEnd
    Fonction accessible: onTouchMove
    Fonction accessible: onTouchStart

    j'ai essayé de simuler chacune d'entre elles en faisant le bourrin, mais ça ne donne rien, même en console... c'est dommage car je sens que je suis pas forcément loin


    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
    48
    49
    50
    // Sélection du bouton par son ID
    var button = document.getElementById('upload-button');
     
    // Itérer sur les propriétés de l'objet bouton pour trouver le gestionnaire d'événements
    var eventHandlerName = null;
    for (var key in button) {
        if (key.startsWith('__reactEventHandlers$')) {
            eventHandlerName = key;
            break;
        }
    }
     
    // Vérifier si un gestionnaire d'événements a été trouvé
    if (eventHandlerName) {
        console.log("Gestionnaire d'événements trouvé:", eventHandlerName);
     
        // Liste des événements à considérer
        var eventsToConsider = [
            'onFocus',
            'onClick',
            'onKeyDown',
            'onKeyUp',
            'onMouseDown',
            'onMouseLeave',
            'onMouseUp',
            'onDragLeave',
            'onTouchEnd',
            'onTouchMove',
            'onTouchStart'
        ];
     
        // Simuler chacun des événements disponibles
        for (var i = 0; i < eventsToConsider.length; i++) {
            var eventName = eventsToConsider[i];
            if (button[eventHandlerName][eventName] && typeof button[eventHandlerName][eventName] === 'function') {
                console.log("Simuler l'événement:", eventName);
                // Création de l'événement avec bubbles:true
                var event = new MouseEvent(eventName, {
                    bubbles: true,
                    cancelable: true,
                    view: window
                });
     
                // Dispatch de l'événement sur le bouton
                button.dispatchEvent(event);
            }
        }
    } else {
        console.log("Aucun gestionnaire d'événements trouvé pour le bouton.");
    }

    EDIT: je me suis intéressé à ta suggestion à savoir que quand la fenêtre est active effectivement le script s'execute.
    Je m'étais pas rendu compte du problème jusqu'à présent car je monitorais ce qui se passait et donc j'avais bien le focus sur Edge
    mais ensuite en laissant tourner et en faisant autre chose, c'est là que le problème est apparu...
    tout cela pour dire que le problème pourrait se résoudre à obtenir le focus sur Edge, ce qui devrait pouvoir se résoudre par des handle.

    je suis pas expert dans l'environnement Windows aussi je serai heureux d'avoir des précisions sur cette notion d'interaction réelle, est ce qu'on parle d'avoir le focus ? que la fenêtre soit au premier plan ?

    merci pour votre aide

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 273
    Points : 15 589
    Points
    15 589
    Par défaut
    le nom à passer au constructeur est par exemple "click" au lieu de "onClick".
    et peut-être que MouseEvent est limité aux évènements de la souris, regardez là pour les autres classes :
    https://developer.mozilla.org/fr/docs/Web/API/Event

Discussions similaires

  1. [Débutant] Integers can only be combined with integers of the same class
    Par slaima15 dans le forum Images
    Réponses: 24
    Dernier message: 06/10/2011, 09h49
  2. Réponses: 0
    Dernier message: 27/10/2010, 01h45
  3. File chooser dialog box
    Par Fleur_sauvage dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 28/08/2010, 15h18
  4. Gtk File Chooser, Erreur au Debogage.
    Par St4nl3y dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 28/10/2009, 00h40
  5. Réponses: 1
    Dernier message: 11/05/2009, 15h36

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