Forum Programmation.web Marque-page javascripté

Posté par . Licence CC by-sa.
0
17
nov.
2014

Bonjour,

J'utilise régulièrement un site (suivi de la scolarité de mes enfants) pour lequel Firefox ne me propose pas d'enregistrer l'identifiant et le mot de passe.

Je me suis donc créé un marque-page scripté, dont voici le détail :
javascript:(function(){document.getElementById("password").value="MOTdePASSE";document.getElementById("username").value="IDENTIFIANT";document.getElementById("SubmitCreds").click()})();

Ainsi, en un seul clic, le formulaire est rempli et la connexion démarre.

Ma question : est-il possible d'améliorer mon code pour y inclure le chargement de la page ? Autrement dit, j'aimerais éviter de cliquer d'abord sur le marque-page du site, puis lorsque la page est chargée, sur mon marque-page scripté.

Le site est souvent très lent, et en regroupant les deux actions je pourrais faire autre chose pendant ce temps.

Merci pour tous les éléments de réponse que vous pourrez m'apporter !

  • # pas la solution

    Posté par . Évalué à 2.

    j'ai essayé le site,
    avec safari, firefox
    en cochant ordinateur privé, comme en laissant ordinateur public

    ca me propose bien d'enregistrer le mot de passe pour le site.

    tu n'aurais pas fait "plus jamais pour ce site" à un moment ?
    car en cochant cette case je n'ai effectivement plus la possibilité de le sauvegarder (ca doit pouvoir se reinitialiser)

    • [^] # Re: pas la solution

      Posté par . Évalué à 2.

      ca se reinitialise en allant dans "preferences -> securité"
      puis dans le paragraphe "mot de passe" cliquer sur "exceptions"

    • [^] # Re: pas la solution

      Posté par . Évalué à 1.

      Bonsoir,

      Et merci pour la réponse.
      Le blocage ne vient pas de moi mais du site qui inclut des propriétés autocomplete="off" dans le code HTML du formulaire.

      J'ai déjà essayé, avec un autre marque-page scripté, de modifier ces propriétés à "on".
      Firefox a alors enregistré mon identifiant et mon mot de passe, mais je ne sais pas pourquoi, lorsque je reviens sur la page, les deux champs restent vides sans que je ne puisse les remplir.

      Mais ma question ne dépend pas tellement du problème de Firefox : est-il possible, en javascript, de charger une page, d'attendre qu'elle soit chargée, puis d'exécuter de nouvelles instructions ? Mes recherches n'ont rien donné.

      Merci encore.

      • [^] # Re: pas la solution

        Posté par . Évalué à 3.

        en passant par un iframe peut-etre ?
        iframe sur un serveur à toi,
        qui charge la page, puis execute ton script de completion

        • [^] # Re: pas la solution

          Posté par . Évalué à 1.

          Je ne connais pas trop le fonctionnement des iframes, je vais chercher demain, et je posterai le résultat de mes essais.
          J'ai le plaisir de me coucher avec une piste, merci !

        • [^] # Re: pas la solution

          Posté par . Évalué à 1.

          J'ai fait des essais avec des iframes.
          Mais je bloque sur un problème de domaines : depuis une page de mon serveur, je dois accéder à des éléments d'une page distante.
          Javascript semble bloquer ces opérations, comme en parle cette page en anglais.

          J'ai donc l'impression que cette solution ne peut pas aboutir.

    • [^] # Re: pas la solution

      Posté par (page perso) . Évalué à 2. Dernière modification le 18/11/14 à 08:39.

      j'ai essayé le site, avec safari, firefox en cochant ordinateur privé, comme en laissant ordinateur public ca me propose bien d'enregistrer le mot de passe pour le site.
      

      J'ai regardé le code pour "privé" ou "publique", ça permet juste d'avoir un cookie qui ne t'oblige pas à te reconnecter à chaque fois :

      function clkSec() {
          var rdoPrvt = document.getElementById('rdoPrvt');
          var c = rdoPrvt.checked;
          if (!c) {
              var oD = new Date();
              oD.setTime(oD.getTime() - 9999);
              document.cookie = "logondata=; expires=" + oD.toUTCString();
          }
      }

      Je n'ai jamais trop touché au javascript, mais ça m'étonne qu'ils enlèvent 9999 au lieu de les ajouter… ça signifie que la date d'expiration est toujours expirée, non ? Il semblerait que si, si on exécute le code dans la console javascript de Firefox :

      < date = new Date()
      > Date 2014-11-18T07:33:08.986Z
      < date.toUTCString()
      > "Tue, 18 Nov 2014 07:33:08 GMT"
      < date.setTime(date.getTime() - 9999)
      > 1416295978987
      < date.toUTCString()
      > "Tue, 18 Nov 2014 07:32:58 GMT"

      Firefox me propose bien d'enregistrer le mot de passe, mais il ne complète pas le formulaire quand j'y reviens (justement à cause de "autocomplete=off" dans le code de l'input).

      Au fait, Greasmonkey ne permettrait pas de rajouter du javascript à la page qui s'exécute lorsque celle-ci est chargée ? D'après la description, c'est ce que tu cherches, mais je ne l'ai jamais utilisé.

      • [^] # Re: pas la solution

        Posté par . Évalué à 1.

        Merci pour ces compléments, et pour la nouvelle piste Greasemonkey.
        Je viens de l'installer, je vais commencer à faire des tests.
        À suivre …

      • [^] # Re: pas la solution

        Posté par . Évalué à 1.

        Mon problème est résolu !

        Un grand merci NeoX et Adrien pour vos contributions.

        J'ai installé GreaseMonkey, j'ai choisi nouveau script, j'ai entré mon domaine «entea.fr».
        Un éditeur s'ouvre pour le script, je n'ai eu qu'à ajouter mes trois lignes :

        document.getElementById("password").value="MOTdePASSE";
        document.getElementById("username").value="IDENTIFIANT";
        document.getElementById("SubmitCreds").click();
        

        Maintenant, lorsque je clique sur mon marque-page, la connexion est déclenchée automatiquement. Génial !

  • # Greasmonkey

    Posté par . Évalué à 3.

    Comme dit au dessus c'est Greasemonkey que tu cherche.

    Le problème des bookmarklet c'est qu'en chargeant une nouvelle URL tu reset l’environnement javascript, donc le reste de ton script après le changement de page est perdu.

    On pourrait être tenté de charger la page dans le document actuel, mais dans ce cas on se frotte à la same origin policy.

    Sinon, vu que tu valide déjà le formulaire dans ton bookmarklet, tu peut tenter de le créer par la même occasion, un truc du genre :

    function post() {
      var form_data = [
        {name: 'curl', value: 'Z2F'},
        {name: 'flags', value: '0'},
        {name: 'forcedownlevel', value: '0'},
        {name: 'formdir', value: '7'},
        {name: 'username', value: 'MYUSERNAME'},
        {name: 'password', value: 'MYPASSWORD'},
        {name: 'trusted', value: '0'}
      ];
    
      var form = document.createElement('form');
      form.setAttribute('method', 'POST');
      form.setAttribute('action', 'https://www.entea.fr/CookieAuth.dll?Logon');
    
      for (var i in form_data) {
        var input = document.createElement('input');
        input.setAttribute('type', 'hidden');
        input.setAttribute('name', form_data[i].name);
        input.setAttribute('value', form_data[i].value);
    
        form.appendChild(input);
      }
    
     document.body.appendChild(form);
     form.submit();
    }
    
    post();

    Mais ça peut ne pas marcher, genre si y'a un formulaire caché avec des valeurs dynamiques ou un contrôle du referer.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.