Je construis un outil d'accessibilité qui aide les personnes ayant un contrôle moteur limité à écrire des courriels, et j'ai donc besoin d'une focalisation programmatique sur le champ "To" (le premier champ de la fenêtre de composition de Gmail).
J'ai essayé différentes combinaisons des éléments suivants dans le panneau Chrome devtools, sur l'élément textarea et son parent. Rien ne semble faire bouger les choses.
setTimeout(() => {
let el = document.querySelector('*[name="to"]');
el.dispatchEvent(new MouseEvent('mouseover', {bubbles: true}));
el.dispatchEvent(new MouseEvent('mousedown', {bubbles: true}));
el.focus();
el.dispatchEvent(new MouseEvent('mouseup', {bubbles: true}));
el.click();
console.log('done')
}, 5000)
Voici un exemple du balisage correspondant :
<div class="wO nr l1" style="">
<input class="wA" tabindex="-1" aria-hidden="true">
<textarea rows="1" id=":bw" class="vO" name="to" spellcheck="false" autocomplete="false" autocapitalize="off" autocorrect="off" tabindex="1" dir="ltr" aria-label="To" role="combobox" aria-autocomplete="list" style="width: 380px;"></textarea>
<div class="aA6">
<span>
<div tabindex="1" style="background-color: transparent; width: 1px; height: 1px; position: absolute;"></div>
<div tabindex="1" style="background-color: transparent; width: 1px; height: 1px; position: absolute;"></div>
<span><span id=":8p" class="aB gQ pE" role="link" tabindex="1" data-tooltip="Add Cc recipients (Ctrl-Shift-C)" aria-label="Add Cc recipients (Ctrl-Shift-C)" style="user-select: none;">Cc</span><span id=":8o" class="aB gQ pB" role="link" tabindex="1" data-tooltip="Add Bcc recipients (Ctrl-Shift-B)" aria-label="Add Bcc recipients (Ctrl-Shift-B)" style="user-select: none;">Bcc</span><span id=":aw" role="button" tabindex="1" aria-hidden="false" class="bcV Sz" style="display:none" data-tooltip="Some recipients use services that don't support encryption (click for details)" aria-label="Some recipients use services that don't support encryption (click for details)"></span></span><div tabindex="1" style="background-color: transparent; width: 1px; height: 1px; position: absolute;">
</div>
</span>
</div>
</div>