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 :

Utiliser Greasemonkey pour modifier une Fonction JS qui utilise Ajax


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut Utiliser Greasemonkey pour modifier une Fonction JS qui utilise Ajax
    Bonjour à tous.

    Alors, mon but est de Réécrire la fonction RedeemRPProduct et la réévaluer avec eval ou new Function, pour qu’elle traite différemment les données ajax de l'id fp_min_reward du Code HTML correspondant, voire qu’elle ne fasse plus d’appel ajax.

    Voici mon 1er code JS qui contient la fonction RedeemRPProduct originale est :

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    function RedeemRPProduct(id) {
      $(".reward_link_redeem_button_style").attr("disabled", true);
      $(".orange_button").attr("disabled", true);
      var points = $("#encash_points_number").val();
     
      $.get('/?op=redeem_rewards&id=' + id + '&points=' + points, function(data) {
        var result = data.split(":");
        var msg;
        if (result[0] == "s") {
          $('.user_reward_points').html(result[2]);
          if (result[1] == "s1") {
            $('#balance').html(result[5]);
            balanceChanged();
            msg = "Successfully converted " + ReplaceNumberWithCommas(parseInt(result[3])) + " points to " + parseFloat(parseInt(result[4]) / 100000000).toFixed(4);
          } else if (result[1] == "s2") {
            msg = "Your bonus has been succesfully activated!";
            var inner_div_html = '<p>Active bonus <span class="free_play_bonus_box_span_large">' + result[5] + '</span> ends in <span class="free_play_bonus_box_span_large" id="bonus_span_' + result[3] + '"></span></p>';
            if ($("#bonus_container_" + result[3]).length > 0) {
              $("#bonus_container_" + result[3]).html(inner_div_html);
            } else {
              $('#reward_points_bonuses_main_div').append('<div class="bold center free_play_bonus_box_large" id="bonus_container_' + result[3] + '">' + inner_div_html + '</div>');
            }
            $("#bonus_container_" + result[3]).show();
            BonusEndCountdown(result[3], parseInt(result[4]));
            if (result[3] == "fp_bonus") {
              $('#fp_min_reward').html(result[6]);
            }
          } else if (result[1] == "s3") {
            msg = "Your redemption request for " + result[3] + " has been sent succesfully. We shall contact you via email for your shipping details (if required). If you do not have an email address added to your account, please add it now via the PROFILE page.";
          }
        } else if (result[0] == "e") {
          msg = result[1];
        }
        DisplaySEMessage(result[0], msg);
        $(".reward_link_redeem_button_style").attr("disabled", false);
        $(".orange_button").attr("disabled", false);
      });
    }
     
    function BonusEndCountdown(selector, duration) {
      var start = Date.now(), diff, hours, minutes, seconds;
     
      var timer_run = setInterval(function timer() {
        diff = duration - (((Date.now() - start) / 1000) | 0);
        hours = (diff / (60 * 60)) | 0;
        minutes = ((diff - (hours * 60 * 60)) / 60) | 0;
        seconds = (diff - (minutes * 60) - (hours * 60 * 60)) | 0;
        hours = hours < 10 ? "0" + hours : hours;
        minutes = minutes < 10 ? "0" + minutes : minutes;
        seconds = seconds < 10 ? "0" + seconds : seconds;
        $("#bonus_span_" + selector).html(hours + ':' + minutes + ':' + seconds);
        if (diff <= 0) {
          $("#bonus_container_" + selector).hide();
          clearInterval(timer_run);
          return;
        }
      }, 1000);
    }
     
    function DisplaySEMessage(result, msg, custom_timeout) {
      if (result != '' && result != 0 && result != undefined && msg != '' && msg != 0 && msg != undefined) {
        clearTimeout(se_msg_timeout_id);
        $('.reward_point_redeem_result_box').removeClass('reward_point_redeem_result_error');
        $('.reward_point_redeem_result_box').removeClass('reward_point_redeem_result_success');
        $('#reward_point_redeem_result_container_div').show();
        if (result == "s") {
          $('.reward_point_redeem_result_box').addClass('reward_point_redeem_result_success');
        } else if (result == "e") {
          $('.reward_point_redeem_result_box').addClass('reward_point_redeem_result_error');
        }
        $('.reward_point_redeem_result').html(msg);
        var timeout = 15000;
        if (custom_timeout > 0) {
          timeout = custom_timeout;
        }
        se_msg_timeout_id = setTimeout(function() {
          $('#reward_point_redeem_result_container_div').hide();
        }, timeout);
      }
    }
     
    function balanceChanged() {
      if (max_deposit_bonus > parseFloat(min_bonus_amount)) {
        $('.dep_bonus_max').html(max_deposit_bonus);
      }
      $('#balance2').html($('#balance').html());
      balance_last_changed = Math.floor(Date.now() / 1000);
    }
    Le Code HTML contenant la données à modifier est juste ci-dessous et cette données à modifier est celle de l'id fp_min_reward du Code HTML correspondant qui était appelée via Ajax:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div class="large-6 small-6 columns center lottery_winner_table_box lottery_winner_table_first_last_cell" style="border-left: none;" id="fp_min_reward">1.0024</div>
    Et maintenant mon 2ème Code JS dans lequel je souhaiterais réécrire la fonction RedeemRPProduct et la réévaluer avec eval ou new Function, pour qu’elle traite différemment les données ajax de l'id fp_min_reward du Code HTML correspondant, voire qu’elle ne fasse plus d’appel ajax.

    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
    51
    52
    53
    54
    55
    56
    (function() {
        'use strict';
     
    var body = $('body');
     
    var points = {};
     
        if ($('#free_play_form_button').is(':visible'))
            setTimeout(function(){ $('#free_play_form_button').click();},2000);
        if ($('.close-reveal-modal').is(':visible'))
            setTimeout(function(){ $('.close-reveal-modal').click(); },2000);
     
        var reward = {};
        reward.select = function() {
            reward.points = parseInt($('.user_reward_points').text().replace(',',""));
            reward.bonustime = {};
            if ($("#bonus_container_free_points").length != 0) {
                reward.bonustime.text = $('#bonus_span_free_points').text();
                reward.bonustime.hour = parseInt(reward.bonustime.text.split(":")[0]);
                reward.bonustime.min = parseInt(reward.bonustime.text.split(":")[1]);
                reward.bonustime.sec = parseInt(reward.bonustime.text.split(":")[2]);
                reward.bonustime.current = reward.bonustime.hour * 3600 + reward.bonustime.min * 60 + reward.bonustime.sec;
            } else
                reward.bonustime.current = 0;
     
     
            console.log(reward.bonustime.current);
            if (reward.bonustime.current !== 0) {
                console.log(reward.bonustime.current);
            } else {
                if (reward.points < 12) {
                    console.log("waiting for points");
                }
                else if (reward.points < 120) {
                        console.log("waiting for points 60");
                        RedeemRPProduct('free_points_1');
                    }
                else if (reward.points < 600) {
                        console.log("waiting for points 120");
                        RedeemRPProduct('free_points_10');
                    }
                else if (reward.points < 1200) {
                        console.log("waiting for points 600");
                        RedeemRPProduct('free_points_50');
                    }
                else {
                    RedeemRPProduct('free_points_100');
                }
                if ($('#bonus_span_fp_bonus').length === 0)
                    if (reward.points >= 4400)
                        RedeemRPProduct('fp_bonus_1000');
            }
        };
        setTimeout(reward.select,1000);
        setInterval(reward.select,60000);
    })();
    La variable result est déclarée ligne 7 du 1er Code JS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var result = data.split(":");
    Et data c’est la réponse de la requête ajax $.get de la ligne juste au-dessus. Les valeurs que je recherche n’apparaissent pas dans le code car elles sont transmises via Ajax.

    Alors, comment donc réécrire la fonction RedeemRPProduct dans le 2ème Code JS et la réévaluer avec eval ou new Function, pour qu’elle traite différemment les données ajax qui s'affiche au niveau de l'id fp_min_reward du Code HTML correspondant, voire qu’elle ne fasse plus d’appel ajax ???

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    insère une balise script sur ta page
    colle le code dedans
    appende ta balise dans le head ou body
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Bon, je suis désolé, eval ou new Function c’était mon idée, et en fait c’est se compliquer la vie pour rien. Depuis hier et ton autre topic, j’ai réalisé qu’il y a beaucoup plus simple : recopier le code et le modifier à la main. Excuse-moi pour ces inutiles nœuds au cerveau.

    Ce qui me paraît le plus simple en fin de compte, c’est de rajouter seulement une ligne après la déclaration de result :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        var result = data.split(":");
        result[6] = 1.0024;
        ...
    Le plus délicat est de savoir à quel moment insérer ton code qui modifie cette fonction RedeemRPProduct. L’idéal serait de pouvoir l’insérer entre la déclaration originale de la fonction et l’endroit où elle est appelée. Mais, comme on l’a vu dans ton autre topic, les appels sont dans des balises <script> au beau milieu du code HTML, et ça complique les choses. Tout dépend de comment tu injectes ton propre script dans la page — sauf erreur de ma part, tu ne l’as pas dit.

    Le plus simple et robuste, à mon avis, c’est d’utiliser Object.defineProperty pour déclarer ta propre version de la fonction avant le script original, mais de lui laisser un setter qui ne fait rien pour laisser continuer le script sans erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Object.defineProperty(window, 'RedeemRPProduct', {
      set: function () {},
      get: function () {
        return function RedeemRPProduct(id) {
          ...
     
            var result = data.split(":");
            result[6] = 1.0024;
     
          ...
        };
      }
    });
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par Watilin Voir le message
    Le plus simple et robuste, à mon avis, c’est d’utiliser Object.defineProperty pour déclarer ta propre version de la fonction avant le script original, mais de lui laisser un setter qui ne fait rien pour laisser continuer le script sans erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Object.defineProperty(window, 'RedeemRPProduct', {
      set: function () {},
      get: function () {
        return function RedeemRPProduct(id) {
          ...
     
            var result = data.split(":");
            result[6] = 1.0024;
     
          ...
        };
      }
    });
    Encore une fois, merci cher Watilin pour ton soutien. Mais je voudrais souligner que le Code qui est inséré dans la console du navigateur et qui change automatiquement le contenu de l'id fp_min_reward du côté de la Page HTML est le 2ème Code JS situé ci-dessus.

    Une fois inséré ce Code, il déclenche aussi le Message "Your bonus has been succesfully activated!" du 1er Code JS en-dessus.
    Alors, ma question est, comment ajouter ton Code que tu viens juste de me donner en réponse dans le 2ème Code JS ci-dessus qui est celui qui est inséré dans la Console du Navigateur Web pour que celui-ci fasse le remplacement tant espéré de l'id fp_min_reward du côté de la Page HTML ???

    Merci de m'éclaircir car en réalité, je ne sais pas exactement comment utiliser ton Code car mon but est de l'utiliser en passant par la Console du Navigateur. Alors, comment l'ajouter au 2ème Code JS ci-dessus que j'utilise d'habitude en passant par la Console du Navigateur Web ???

  5. #5
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Tu peux le faire si tu injectes ton script sous la forme d’un userscript. Pour ça il te faudra un userscript manager, par exemple Greasemonkey ou Tampermonkey. C’est une extension de navigateur. Avec ça, tu crées ton script et les en-têtes nécessaires sont ajoutés automatiquement. Il faudra juste que tu rajoutes cette directive :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    // @run-at      document-start
    Pour que ton script soit exécuté en premier.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut
    Encore merci à toi Watilin. Mais depuis hier, je n'arrête de me casser la tête à savoir comme réécrire sous la forme d'un userscript (précisément avec Greasemonkey) le Script c'est à dire le 2ème Code JS ci-dessus puisque c'est le Code à insérer dans la Console du Navigateur Web pour permettre la réévaluation de la fonction RedeemRPProduct avec bien sûr l'utiliisation de la Propriété Object.defineProperty comme à l'exemple de ton Code ci-dessus.

    Mais je pose d'abord mille et une fois eule question à la fois.

    Dois-je modifier toute la fonction RedeemRPProduct du 1er Code JS avant de l'ajouter au 2ème Code JS (qui sera mon véritable Script à utiliiser) ci-dessus ou dois-je simplement ajouter le bout de Code de la rééavalution de la variable result avec la Propriété Object.defineProperty comme tu l'as fais ci-dessus ???

    Le problème avec moi, c'est d'abord comment réécrire mon 2ème Code JS ci-dessus avec Greasemonkey ???

    Et comment lui ajouter la réévaluation de la variable result sans oublier que la data de la Variable result (précisée sur la ligne 7 du 1er Code JS) est la réponse de la requête ajax $.get de la ligne juste au-dessus et qui est la donnée qui s'affiche au de l'id fp_min_reward ???

    Je suis vraiment confondu sur tout plan. Sur comment commencer avec Greasemonkey car je n'ai jamais écrire un Script avec une telle extention et sur comment réécrire la fonction RedeemRPProduct du 1er Code JS avant de l'ajouter au 2ème Code JS qui est mon Script à utiliser. Si je dois réécrire la totalité de cette fonction RedeemRPProduct avec la réévaluation de la variable result en utilisant la Propriété Object.defineProperty comme tu l'as fais ci-dessus ???

    En gros, à quelle partie du 2ème Code JS ci-dessus, dois-je ajouter la réévaluation de la variable result en utilisant la Propriété Object.defineProperty comme Watilin l'as fais juste en haut pour cette fonction RedeemRPProduct pour que celui-ci fasse le remplacement tant espéré de l'id fp_min_reward qui lui est lié du côté de la Page HTML juste après l'avoir inséré via la Console du Navigateur ???

    Vraiment, j'ai besoin de grande aide de votre part.

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut Comment utiliser Greasemonkey pour modifier une Fonction JS qui utilise Ajax ?
    Bonjour.

    Voici 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
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    function RedeemRPProduct(id) {
      $(".reward_link_redeem_button_style").attr("disabled", true);
      $(".orange_button").attr("disabled", true);
      var points = $("#encash_points_number").val();
     
      $.get('/?op=redeem_rewards&id=' + id + '&points=' + points, function(data) {
        var result = data.split(":");
        var msg;
        if (result[0] == "s") {
          $('.user_reward_points').html(result[2]);
          if (result[1] == "s1") {
            $('#balance').html(result[5]);
            balanceChanged();
            msg = "Successfully converted " + ReplaceNumberWithCommas(parseInt(result[3])) + " points to " + parseFloat(parseInt(result[4]) / 100000000).toFixed(4);
          } else if (result[1] == "s2") {
            msg = "Your bonus has been succesfully activated!";
            var inner_div_html = '<p>Active bonus <span class="free_play_bonus_box_span_large">' + result[5] + '</span> ends in <span class="free_play_bonus_box_span_large" id="bonus_span_' + result[3] + '"></span></p>';
            if ($("#bonus_container_" + result[3]).length > 0) {
              $("#bonus_container_" + result[3]).html(inner_div_html);
            } else {
              $('#reward_points_bonuses_main_div').append('<div class="bold center free_play_bonus_box_large" id="bonus_container_' + result[3] + '">' + inner_div_html + '</div>');
            }
            $("#bonus_container_" + result[3]).show();
            BonusEndCountdown(result[3], parseInt(result[4]));
            if (result[3] == "fp_bonus") {
              $('#fp_min_reward').html(result[6]);
            }
          } else if (result[1] == "s3") {
            msg = "Your redemption request for " + result[3] + " has been sent succesfully. We shall contact you via email for your shipping details (if required). If you do not have an email address added to your account, please add it now via the PROFILE page.";
          }
        } else if (result[0] == "e") {
          msg = result[1];
        }
        DisplaySEMessage(result[0], msg);
        $(".reward_link_redeem_button_style").attr("disabled", false);
        $(".orange_button").attr("disabled", false);
      });
    }
     
    function BonusEndCountdown(selector, duration) {
      var start = Date.now(), diff, hours, minutes, seconds;
     
      var timer_run = setInterval(function timer() {
        diff = duration - (((Date.now() - start) / 1000) | 0);
        hours = (diff / (60 * 60)) | 0;
        minutes = ((diff - (hours * 60 * 60)) / 60) | 0;
        seconds = (diff - (minutes * 60) - (hours * 60 * 60)) | 0;
        hours = hours < 10 ? "0" + hours : hours;
        minutes = minutes < 10 ? "0" + minutes : minutes;
        seconds = seconds < 10 ? "0" + seconds : seconds;
        $("#bonus_span_" + selector).html(hours + ':' + minutes + ':' + seconds);
        if (diff <= 0) {
          $("#bonus_container_" + selector).hide();
          clearInterval(timer_run);
          return;
        }
      }, 1000);
    }
     
    function DisplaySEMessage(result, msg, custom_timeout) {
      if (result != '' && result != 0 && result != undefined && msg != '' && msg != 0 && msg != undefined) {
        clearTimeout(se_msg_timeout_id);
        $('.reward_point_redeem_result_box').removeClass('reward_point_redeem_result_error');
        $('.reward_point_redeem_result_box').removeClass('reward_point_redeem_result_success');
        $('#reward_point_redeem_result_container_div').show();
        if (result == "s") {
          $('.reward_point_redeem_result_box').addClass('reward_point_redeem_result_success');
        } else if (result == "e") {
          $('.reward_point_redeem_result_box').addClass('reward_point_redeem_result_error');
        }
        $('.reward_point_redeem_result').html(msg);
        var timeout = 15000;
        if (custom_timeout > 0) {
          timeout = custom_timeout;
        }
        se_msg_timeout_id = setTimeout(function() {
          $('#reward_point_redeem_result_container_div').hide();
        }, timeout);
      }
    }
     
    function balanceChanged() {
      if (max_deposit_bonus > parseFloat(min_bonus_amount)) {
        $('.dep_bonus_max').html(max_deposit_bonus);
      }
      $('#balance2').html($('#balance').html());
      balance_last_changed = Math.floor(Date.now() / 1000);
    }
    Mon souhait étant de modifier le contenu de l'id fp_min_reward du côté de mon Code HTML, je précise que cet id (fp_min_reward) est défini dans le Code ci-dessus à la ligne 26 avec la méthode html() qui contient elle aussi result[6].

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $('#fp_min_reward').html(result[6]);
    Alors, Comment modifier avec Greasemonkey la fonction RedeemRPProduct originale qui contient la variable result déclarée à la ligne 7 et qui contient une data (qui est la réponse de la requête Ajax $.get de la ligne juste au-dessus) de sorte à ce que result[6] soit égal à 1.0024 ???

    Dois-je modifier l'intégralité du Code ci-dessus étant donné que c'est la valeur de result[6] (à laquelle je souhaiterais donner une valeur 1.0024) seulement que je cherche à modifier ???

    Merci de m'aider svp.

  8. #8
    Membre chevronné

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Points : 1 768
    Points
    1 768
    Billets dans le blog
    1
    Par défaut
    Je dirais qu'il serait plus judicieux de le faire après l'affichage du body.onload en ciblant par l'id la classe le parent child ta donné pour la modifier sans te prendre la tête a hooker toute la fonction...

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par cheboy Voir le message
    Mon souhait étant de modifier le contenu de l'id fp_min_reward du côté de mon Code HTML,
    dans ce cas, il suffit de juste utiliser le code suivant qui modifie l'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $('#fp_min_reward').html("mon texte");

  10. #10
    Membre chevronné

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Points : 1 768
    Points
    1 768
    Billets dans le blog
    1
    Par défaut
    Je dirais qu'il serait plus judicieux de le faire après l'affichage du body.onload en ciblant par l'id la classe le parent child ta donné pour la modifier sans te prendre la tête a hooker toute la fonction...

    Par exemple je n'aime pas que google soit autorisé a exécuter ses script js sur ma machine, j'ai du créer un script afin de zapper ses restrictions si on n'accepte pas ses js :

    Donc je me suis débarrassé de ses restrictions en utilisant les techniques de fetching pour web crapping (se bassé sur ses prérogative css) on pourrait faire autrement mais je suis un peu flém...

    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
     
     
    // ==UserScript==
    // @name Google consentemnt
    // @namespace Violentmonkey Scripts
    // @match *://*.google.fr/*
    // @grant none
    // ==/UserScript==
    var body = document.body;
    var gs = (document.body.getElementsByClassName('lb')[0] === undefined) ? document.getElementById('lb') : document.body.getElementsByClassName('lb')[0]; // google search
    var gb = (document.body.getElementsByClassName('gb_Ia')[0] === undefined) ? document.getElementById('gb_Ia') : document.body.getElementsByClassName('gb_Ia')[0]; // google search
     
     
    function isInPage(node) {
      return (node === document.body) ? false : document.body.contains(node);
    }
     
     
     
    body.onload = function(){
      if(isInPage(gs) === false){gs = document.getElementsByClassName('gb_Ja')[0];}
      console.log("loading")
      console.log("gb : " + isInPage(gb));
      console.log("gs : " + isInPage(gs));
      if(isInPage(gs)){
        gs.remove();
        console.log(document.querySelector('html').getAttribute('class') === 'nsc');
        if(document.querySelector('html').getAttribute('class') === 'nsc')
        document.querySelector('html').removeAttribute('class');
      }
      if(isInPage(gb)){
        gb.remove();
        console.log(document.querySelector('html').getAttribute('class') === 'gb_Ta gb_Ha');
        if(document.querySelector('html').getAttribute('class') === 'gb_Ta gb_Ha')
        document.querySelector('html').removeAttribute('class');
      }
     
     
    };

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par headmax Voir le message
    Je dirais qu'il serait plus judicieux de le faire après l'affichage du body.onload en ciblant par l'id la classe le parent child ta donné pour la modifier sans te prendre la tête a hooker toute la fonction...

    Par exemple je n'aime pas que google soit autorisé a exécuter ses script js sur ma machine, j'ai du créer un script afin de zapper ses restrictions si on n'accepte pas ses js :

    Donc je me suis débarrassé de ses restrictions en utilisant les techniques de fetching pour web crapping (se bassé sur ses prérogative css) on pourrait faire autrement mais je suis un peu flém...

    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
     
     
    // ==UserScript==
    // @name Google consentemnt
    // @namespace Violentmonkey Scripts
    // @match *://*.google.fr/*
    // @grant none
    // ==/UserScript==
    var body = document.body;
    var gs = (document.body.getElementsByClassName('lb')[0] === undefined) ? document.getElementById('lb') : document.body.getElementsByClassName('lb')[0]; // google search
    var gb = (document.body.getElementsByClassName('gb_Ia')[0] === undefined) ? document.getElementById('gb_Ia') : document.body.getElementsByClassName('gb_Ia')[0]; // google search
     
     
    function isInPage(node) {
      return (node === document.body) ? false : document.body.contains(node);
    }
     
     
     
    body.onload = function(){
      if(isInPage(gs) === false){gs = document.getElementsByClassName('gb_Ja')[0];}
      console.log("loading")
      console.log("gb : " + isInPage(gb));
      console.log("gs : " + isInPage(gs));
      if(isInPage(gs)){
        gs.remove();
        console.log(document.querySelector('html').getAttribute('class') === 'nsc');
        if(document.querySelector('html').getAttribute('class') === 'nsc')
        document.querySelector('html').removeAttribute('class');
      }
      if(isInPage(gb)){
        gb.remove();
        console.log(document.querySelector('html').getAttribute('class') === 'gb_Ta gb_Ha');
        if(document.querySelector('html').getAttribute('class') === 'gb_Ta gb_Ha')
        document.querySelector('html').removeAttribute('class');
      }
     
     
    };
    Mais là franchement, je ne comprends rien et je dirai sans vouloir vous offenser que je ne vois pas trop le rapport avec ma fonction RedeemRPProduct car mon objectif est d'attribuer une nouvelle valeur (qui est n'est pas définie dans le Code de la Fonction RedeemRPProduct) à la variable result[6].

    J'avais une fois posté presque la même inquiétude et voici la réponse d'un membre du nom de Watilin qui m'a proposé d'utiliser la Propriété Object.defineProperty.


    Envoyé par Watilin

    Le plus simple et robuste, à mon avis, c’est d’utiliser Object.defineProperty pour déclarer ta propre version de la fonction avant le script original, mais de lui laisser un setter qui ne fait rien pour laisser continuer le script sans erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Object.defineProperty(window, 'RedeemRPProduct', {
      set: function () {},
      get: function () {
        return function RedeemRPProduct(id) {
          ...
     
            var result = data.split(":");
            result[6] = 1.0024;
     
          ...
        };
      }
    });
    Mais là, je me demande comment utiliser ce Code proposé par Watilin car je ne sais pas si les ... avant et après la variable result sont à remplacer par le reste du Code de la Fonction RedeemRPProduct ???

    Ou dois-je laisser ce Code exactement comme il l'a fait sans rien modifier (sans même remplacer les ... avant et après la variable result par quelque chose d'autre) ???

    Comment utiliser finalement ce Code fourni par Watilin pour qu'il corresponde à mon souhait d'attribuer une nouvelle valeur (qui est n'est pas définie dans le Code de la Fonction RedeemRPProduct) à la variable result[6] sans oublier que celui-ci utilise aussi une Requête Ajax ???

    Veuillez m'éclaircir svp avec plus de précision.

  12. #12
    Membre chevronné

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Points : 1 768
    Points
    1 768
    Billets dans le blog
    1
    Par défaut
    Salut désolé pour ton incompréhension j'ai cru comprendre comment utiliser Greasemonkey, pour ce qui est du choix de hooker la function présenté par @Watilin, les ... est le code avant et après le changement d'état de ta variable.
    J'imagine que ce changement a lieu dans la function(data) de la partie de ton code (return ajax)

    Un essai : bien entendu a adapter a ton contexte .
    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
    Object.defineProperty(window, 'RedeemRPProduct', {
      set: function () {},
      get: function () {
        return function RedeemRPProduct(id) {
          var result = data.split(":");
            result[6] = 1.0024;
        var msg;
        if (result[0] == "s") {
          $('.user_reward_points').html(result[2]);
          if (result[1] == "s1") {
            $('#balance').html(result[5]);
            balanceChanged();
            msg = "Successfully converted " + ReplaceNumberWithCommas(parseInt(result[3])) + " points to " + parseFloat(parseInt(result[4]) / 100000000).toFixed(4);
          } else if (result[1] == "s2") {
            msg = "Your bonus has been succesfully activated!";
            var inner_div_html = '<p>Active bonus <span class="free_play_bonus_box_span_large">' + result[5] + '</span> ends in <span class="free_play_bonus_box_span_large" id="bonus_span_' + result[3] + '"></span></p>';
            if ($("#bonus_container_" + result[3]).length > 0) {
              $("#bonus_container_" + result[3]).html(inner_div_html);
            } else {
              $('#reward_points_bonuses_main_div').append('<div class="bold center free_play_bonus_box_large" id="bonus_container_' + result[3] + '">' + inner_div_html + '</div>');
            }
            $("#bonus_container_" + result[3]).show();
            BonusEndCountdown(result[3], parseInt(result[4]));
            if (result[3] == "fp_bonus") {
              $('#fp_min_reward').html(result[6]);
            }
          } else if (result[1] == "s3") {
            msg = "Your redemption request for " + result[3] + " has been sent succesfully. We shall contact you via email for your shipping details (if required). If you do not have an email address added to your account, please add it now via the PROFILE page.";
          }
        } else if (result[0] == "e") {
          msg = result[1];
        }
        DisplaySEMessage(result[0], msg);
        $(".reward_link_redeem_button_style").attr("disabled", false);
        $(".orange_button").attr("disabled", false);
        };
      }
    });

  13. #13
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut
    Merci beaucoup à vous @headmax mais ma dernière inquiétude est de savoir si cela écrasera la fonction RedeemRPProduct existante même si celle-ci n'est pas appelée directement sur la même Page avec la Balise <script> </script> mais plutôt sur une page distante (extérieure) .js du genre <script src="myscripts.js"></script> ET surtout ne traitera plus de requête Ajax ???

    Est-ce que si j'insère via Greasemonkey, ce Code agira (écrasera) t-il directement la fonction RedeemRPProduct basé sur le fichier myscripts.js distant et appelé avec le src de la balise <script> </script> ???


    Merci de m'éclaircir svp.

  14. #14
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Je ne comprends vraiment pas ce que tu ne comprends pas. Il n’y a pas de magie. Il n’y a pas de truc invisible. Tu avais déjà posé une question similaire à propos de la console. Le code que tu écris ne fait rien de plus que ce que tu écris. Si la nouvelle fonction RedeemRPProduct comporte un appel ajax, elle fera un appel ajax. Sinon, elle n’en fera pas.

    L’intérêt des userscripts c’est aussi de bidouiller, d’essayer des trucs, de voir ce qui marche et ce qui ne marche pas. Alors n’hésite pas ! Personne ne pourra t’aider mieux que toi-même à comprendre les petites subtilités qui t’échappent.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  15. #15
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut
    Merci Watilin

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Aide pour modifier une fonction
    Par lcoulon dans le forum Débuter
    Réponses: 1
    Dernier message: 13/10/2009, 15h11
  2. utiliser CallWindowProc pour appeler une fonction
    Par cbleas dans le forum VBA Access
    Réponses: 7
    Dernier message: 09/03/2009, 07h17
  3. Utiliser Createprocess pour lancer une fonction
    Par lolita4882 dans le forum C++
    Réponses: 3
    Dernier message: 14/03/2008, 12h01
  4. Problème pour modifier une fonction
    Par condor_01 dans le forum C
    Réponses: 5
    Dernier message: 05/11/2007, 23h03

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