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:
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:
<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:
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:
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 ???
Comment utiliser Greasemonkey pour modifier une Fonction JS qui utilise Ajax ?
Bonjour.
Voici mon Code :
Code:
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:
$('#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.