PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV 2024 → Récupérer la valeur retourné d'une fonction JS
Récupérer la valeur retourné d'une fonction JS
Débuté par g.L, 23 fév. 2024 14:24 - 6 réponses
Membre enregistré
120 messages
Posté le 23 février 2024 - 14:24
Salut a tous,

je me permet de venir réclamer votre aide ^^ j'ai une fonction JS qui est dans une procédure local navigateur

le probleme c'est que je n'arrive pas a récupéré la valeur retournée de cette fonction
help me


code de ma page dans la section Touche enfoncée dans Ma_Page (onkeydown navigateur)
soit ccc = KeyCapturer()
Trace(ccc)


code de ma procédure JS Procédure locale Navigateur
FUNCTION KeyCapturer()
{
let Data = "";
console.log('ok');
Document.addEventListener("keydown", FUNCTION (e) {
IF (Event.keyCode == 123) {
disabledEvent(e);
Data = Event.keyCode
console.log(Data)
RETURN Data;
// console.log('ok1');
}
}, False);

FUNCTION disabledEvent(e) {
IF (e.stopPropagation) {
// console.log('ok2');
e.stopPropagation();
}
ELSE IF (window.event) {
// console.log('ok3');
window.event.cancelBubble = True;
}
e.preventDefault();
// console.log('ok4');
RETURN False;
// console.log('ok5');
}

}


comme vous pouvais le voir je fais un console.log(data) avant le return cela fonctionne j'ai bien mon log avec la valeur de data
mais dans mon trace j'ai undefined
comment je fais pour que la fonction me renvoi une valeur ?
Membre enregistré
3 351 messages
Popularité : +93 (137 votes)
Posté le 23 février 2024 - 17:18
Salut,
Ton code JS n'est pas clair.
Parfois tu renvoie un entier, ou un booléen.
Parfois tu as cette ligne }, False); sans return ni égalité.
Donc déjà, il serait bien de renvoyer que des entiers
Donc tu remplaces RETURN False; par RETURN 0;
Bien sûr précise que ccc est un entier.
En plus, le keycode est Obsolète maintenant il faut utiliser KeyboardEvent: code
Voir https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code
Le undefined signifie que la valeur est absente ce qui est possible puisque tu l'initialise a vide ""
Pour éviter qu'il te renvoie un undefined
Tu peux faire
if (event.key !== undefined) {
J'ai pas eu le temps de vérifier ta fonction pour t'en dire plus.
Membre enregistré
120 messages
Posté le 26 février 2024 - 10:05
Salut Popoy, merci pour ta réponse ^^

Popoy a écrit :
> Parfois tu as cette ligne }, False); sans return ni égalité.

cela vient du code du document.addEventListener :
Document.addEventListener("keydown",FUNCTION(e) {
},False);

c'est un code que j'ai récupérer je t'avoue que je n'ai pas regarder le pourquoi du false a cette endroit


FUNCTION KeyCapturer(){
let Data="";
console.log('ok');
//// étape 1 //////// Capture l'évènement du click
Document.addEventListener("keydown",FUNCTION(e) {
//// étape 2 ///// si la KeyCode = F1
IF(Event.keyCode==123) {
//// étape 3/// appel de la fonction disabledEvent

disabledEvent(e);
//// étape 6 data = F1 (normalement)
Data=Event.keyCode
console.log(Data)
// ici le log me renvoi bien 123
//// étape 7 return data et data n'est pas vide ici
RETURN Data;
//console.log('ok1');
}
},False);
//// étape 4 Début de la fonction disabledEvent
FUNCTIONdisabledEvent(e) {
IF(e.stopPropagation) {
//console.log('ok2');
e.stopPropagation();
}
ELSE IF(window.event) {
//console.log('ok3');
window.event.cancelBubble=True;
}
e.preventDefault();
//console.log('ok4');
//// étape 5 retour de false de la fonction disabledEvent
RETURNFalse;
//console.log('ok5');
}

}


a mon avis le problème vient plus du fais que entre mon code webdev et celui si
le temps que la fonction JS réponde webdev a déjà lu mon trace(ccc) qui est vide a ce moment la
Membre enregistré
397 messages
Popularité : +13 (13 votes)
Posté le 26 février 2024 - 12:20
Bonjour,

Votre fonction KeyCapturer() ajoute un Listener (= un callback) sur l'événement keydown. Mais à part l'ajouter, elle ne fait rien d'autre, ce qui explique pourquoi elle ne renvoie rien.

Si vous souhaitez la conserver, Il ne faut pas l'intégrer dans l'événement "keydown" dans WebDev, mais dans l'initialisation de la page côté navigateur. Il faudra la modifier pour qu'elle accepte un callback (une fonction WL navigateur par exemple) en paramètre, et qu'elle utilise ce callback là où vous faites un console.log(Data);

Mais normalement tout cela n'est pas nécessaire, le keydown est déjà géré nativement par WebDev, même au niveau de la page. Et utiliser le code suivant permet de récupérer le code de la touche et d'effectuer une action en correspondance :
sTouche est une chaîne = JSInfoEvénement("code")
Trace(sTouche)


D'où ma question finale : quel est le but recherché de ce code ?
Message modifié, 26 février 2024 - 12:34
Membre enregistré
120 messages
Posté le 26 février 2024 - 16:55
Salut merci pour ta réponse je vais voir comment la modifier pour quelle retourne une valeur

j'avais déjà utiliser ce morceau de code qui ne fonctionne pas si la touche presser est une des touche suivante ( de F1 a F12) en tout cas si je met le code dans la partie Touche pressée dans Ma_Page(onkeypress navigateur)

sToucheest une chaîne=JSInfoEvénement("code")
Trace(sTouche)

Mais apparament (je viens a l'instant de vérifier) si le code est dans la parti touche enfoncée dans Ma_Page (onkeydown navigateur) cela fonctionne ...
bizarre non ?

> >D'où ma question finale : quel est le but recherché de ce code ?

Le but de ce code et d'empecher chrome d'ouvrir le DevTools (quand tu appuis sur F12)
et d'ouvrir une page si F12 est enfoncé depuis n'importe ou sur le site web

du coup j'ai trouver ma solution grace a toi je n'avais pas penser a faire ça dans dans la section onkeydown navigateur puisque dans onkeypresse cela ne marcher pas .. bref merci a toi ^^
Membre enregistré
397 messages
Popularité : +13 (13 votes)
Posté le 26 février 2024 - 17:42
g.L a écrit :
Le but de ce code et d'empecher chrome d'ouvrir le DevTools (quand tu appuis sur F12)
et d'ouvrir une page si F12 est enfoncé depuis n'importe ou sur le site web


Cela me rappelle le temps où on cherchait à empêcher les utilisateurs de pouvoir télécharger une image... :)

Loin de vouloir saper votre volonté, mais la touche F12 n'est qu'un moyen d'accès au DevTools parmi tant d'autres, et une personne assez "sachante" pour connaitre l'existence du DevTools connaîtra sûrement les autres moyens d'accès, comme entre autres :
- les raccourcis CTRL + SHIFT + I, CTRL + SHIFT + C
- Le bouton "Inspecter" sur le menu contextuel en faisant un clic-droit n'importe où
- Dans le menu de Chrome ("Plus d'outils" > "Outils de développement")
- Et même le debug à distance avec l'argument "--remote-debugging-port"

En bref, voyez votre code comme un petit "easter egg" et afficher une popup ou quelque chose à l'utilisateur, mais ne comptez pas là-dessus pour empêcher réellement l'accès aux DevTools.
Membre enregistré
120 messages
Posté le 27 février 2024 - 09:24
merci encore pour ta réponse oui je sais très bien tout ça ça tiendrai que a moi je ne le ferrai même pas ^^

juste une demande de client qui passe de application a site web et qui insiste sur le fais que avant quand il appuyer sur tel touche ça faisait ça alors il veut ça ^^ du moment ou quand il appuie sur F12 si ça ouvre ca popup avec ce qu'il veut il serra content

je suis quasi sur que mon client ne connais même pas le devTool ^^