« Fonctionnement technique de Jeuxvideo.com » : différence entre les versions

Anokata (discussion | contributions)
Passage en React : crédit rand0max la fonction est generique mais la syntaxe précise ci-dessous est issue de rand0max.
Anokata (discussion | contributions)
 
(2 versions intermédiaires par le même utilisateur non affichées)
Ligne 246 : Ligne 246 :
<s>messageTextArea.value = message;</s>
<s>messageTextArea.value = message;</s>


Heureusement, il existe diverses '''un astuce très utilisée''' sur le web pour contourner ce soucis.<br>Voilà une variante de cette methode fournit par [[Rand0max|''Randomax'']] {{CDV|Pseudo=Randomax}} :  
Heureusement, il existe '''un astuce très utilisée''' sur le web pour contourner ce soucis.<br>Voilà une variante de cette méthode fournie dans le code de JVChat d'après ce [https://www.jeuxvideo.com/forums/message/1286139785 message] :  


  function fonctionReact(textarea, value) {
  function fonctionReact(textarea, value) {
Ligne 281 : Ligne 281 :
  jvc.getMessageEditor(".class").selectedText; // Récupérer la sélection utilisateur.
  jvc.getMessageEditor(".class").selectedText; // Récupérer la sélection utilisateur.


PS : Pour garantir le bon fonctionnement, utilisez simplement jvc.getMessageEditor(); '''sans le préfixe "window"'''<ref>Les userscripts sont exécutés dans un environnement isolé (appelé sandbox), ce qui empêche parfois l’accès direct aux objets définis dans le contexte global de la page, comme "window" .</ref>. <br>
PS : Pour garantir le bon fonctionnement, utilisez simplement <code>jvc.getMessageEditor();</code> et/ou <code>unsafeWindow.jvc.getMessageEditor();</code> <ref>Les userscripts sont exécutés dans un environnement isolé (appelé sandbox), ce qui empêche parfois l’accès direct aux objets définis dans le contexte global de la page, comme "window" .</ref>. <br>


Il est nécessaire de faire appel à <code>jvc.getMessageEditor();</code> à chaque modification, sinon vous travaillerez avec une version antérieure de la zone de texte.
Il est nécessaire de faire appel à <code>jvc.getMessageEditor();</code> à chaque modification, sinon vous travaillerez avec une version antérieure.


Cette fonction prend directement en compte des sélecteurs CSS et pas des éléments, exemple :
Cette fonction prend directement en compte des sélecteurs CSS et pas des éléments, exemple :


  let selector = "#message_topic"
  let selector = "#message_topic";
  jvc.getMessageEditor(selector).insertText('text'); //✅ Marche
  jvc.getMessageEditor(selector).insertText('text'); //✅ Marche


  let selector = document.getElementById("message_topic")
  let selector = document.getElementById("message_topic");
  jvc.getMessageEditor(selector).insertText('text'); //❌ Ne marche pas
  jvc.getMessageEditor(selector).insertText('text'); //❌ Ne marche pas