Quiero crear una pequeña aplicación de chat. También quiero usar el lector de pantalla para que me lea el texto. (Continuamente se deben leer las actualizaciones).
Entonces: debería ser realmente fácil usando el rol "log".
<div id="canvas"> <div id="messages" role="log"> <ul id="test"> <li>Row 1</li> <li>Row 2</li> </ul> </div> </div>Pero en mi caso específico, necesito borrar el div principal y crear el siguiente contenido.
document.getElementById("canvas").innerHtml = "";Noté que si vuelvo a llenar la lista, el lector de pantalla volverá a leer todos los elementos. Pero haré que el lector de pantalla recuerde el último estado.
Así que pensé en almacenar en caché el contenedor como
let cache = document.getElementById("messages") document.getElementById("canvas").innerHtml = ""; document.getElementById("canvas").append(cache);Pero esto también sobrescribe el estado. Estoy usando iOS VoiceOver. ¿Hay alguna manera de llegar a mi caso especial? ¿O alguien tiene alguna idea? ¿O es la única forma de asegurarse de que el padre no sea absuelto?
Muchas gracias
Así de simple: si no quieres que se repita el contenido existente, no debes tocarlo. Agregue el nuevo contenido en su lugar.
Si su marco reemplaza demasiadas cosas (inútiles), su marco está funcionando mal o debe mejorarse.
El lector de pantalla básicamente monitorea los cambios que ocurren en el árbol DOM, en las regiones que se le ha dicho que mire (las llamadas regiones en vivo de ARIA). Así es como funciona en la mayoría, si no en todos, los lectores de pantalla, navegadores y sistemas operativos.
Por lo tanto, si elimina todo de un elemento y lo vuelve a agregar, incluso si el contenido del texto real no ha cambiado, se volverá a leer.
Mire el punto de vista del lector de pantalla: de hecho, no es deseable hacer un análisis preciso de lo que se ha cambiado exactamente en el lugar, como usted describe.
Por ejemplo, Google Chrome Windows tenía ese tipo de problema en el pasado: si escribía "Hacía frío" y luego lo reemplazaba por "Hacía frío", había una tendencia a leer solo "ld", que, por supuesto, no tiene sentido como tal. El análisis preciso probablemente lo realizó el navegador antes de comunicarse con el lector de pantalla, y no en el lector de pantalla, porque funcionó bien en otros navegadores.
Pero piense más profundamente: ¿qué se debe leer en tal caso? ¿Solo la nueva palabra "frío"? toda la frase? El párrafo ? todo el elemento? ¿Incluso si tiene varios párrafos? Si el contenido es exactamente el mismo, ¿hay que repetir el texto o no decir nada, como si nada?
Las respuestas dependen mucho del contexto y el lector de pantalla no puede decidir adoptar un comportamiento constante de una vez por todas. Por lo tanto, es más sencillo simplemente seguir lo que sucede en el DOM y esperar que el diseñador actualice solo lo que tenga sentido en el momento adecuado.
En teoría, se supone que funciona de la siguiente manera, pero todavía hay varios lectores de pantalla que no respetan totalmente estos dos atributos correctamente.
Tenga en cuenta en particular que un reemplazo no es más que una eliminación seguida de una adición y, por lo tanto, no ayuda a resolver su problema.