google docs descargar definicion caracteristicas javascript google-apps-script google-docs google-drive-realtime-api

javascript - docs - google forms



Documentos de Google: el texto de acceso cambia en tiempo real (2)

Como ya se ha imaginado, una extensión del navegador es una buena solución, y podría ser más fácil de lo que piensa: las API de extensión de Chrome están bien documentadas y la creación de una extensión es muy similar a la creación de una página web con HTML y Javascript .

Incluso hay una API de extensión para TTS que se puede integrar con motores TTS personalizados :

Use la API chrome.ttsEngine para implementar un motor de texto a voz (TTS) usando una extensión. Si su extensión se registra utilizando esta API, recibirá eventos que contengan una expresión para hablar y otros parámetros cuando cualquier extensión o aplicación de Chrome utilice la API tts para generar voz. Su extensión puede utilizar cualquier tecnología web disponible para sintetizar y emitir el habla, y enviar eventos de vuelta a la función de llamada para informar el estado.

Gol

Nuestros usuarios trabajan en Google Docs. El texto que escriben se les leerá a medida que escriban usando texto a voz. Debería funcionar en tantas plataformas y navegadores como sea posible.

Nuestra solución

Esto parece ajustarse a Google Apps Script , funciona en todos los navegadores de escritorio y algunos navegadores móviles.

Esto funciona

Tenemos un módulo de texto a voz que funciona muy bien, así que no hay problema. Actualmente estamos usando una sidebar . La barra lateral puede reproducir audio con la etiqueta de audio HTML 5, que funciona sin problemas.

El problema

El problema es realmente obtener el texto del documento de documentos de Google. Hasta ahora no he podido encontrar ninguna forma de acceder al texto del documento de Google directamente desde la barra lateral. Lo que hemos estado haciendo en cambio es:

  1. La barra lateral sondea cada x milisegundo en Google Apps Script que se ejecuta en la nube de Google
  2. Nuestro Google Apps Script que se ejecuta en la nube de Google luego accede al documento sincronizado en la nube
  3. Si encuentra algún cambio, lo envía de vuelta a la barra lateral.
  4. La barra lateral reproduce el audio con la etiqueta de audio HTML5 y nuestro texto a voz.

Se tarda un segundo o más desde el momento en que el usuario ha ingresado texto en google docs hasta el momento en que el cambio se sincroniza en la nube de google docs.

Hemos cronometrado los diferentes pasos. El texto a voz es rápido, y el audio HTML5 tampoco es problema.

El fregadero del tiempo está consiguiendo los cambios de texto . Actualmente demora de 1 a 3 segundos , que es demasiado tiempo para nuestro caso de uso.

Pregunta

¿Podemos acceder más rápido al texto en Google Docs? ¿Tal vez directamente en lugar de pasar por la nube de Google?

ACTUALIZACIÓN 2017-02-15 Parece que actualmente no es posible. Lo que es posible es hacer esto con una extensión de Chrome, analiza la página de inicio de Google Docs y extrae el texto de HTML + JS. Esto es bastante difícil pero ... posible.


Si un complemento del navegador es una forma adecuada de ofrecer la función, debería ser posible escuchar los cambios que Google Docs realiza al DOM cuando actualiza el contenido de la página.

// This div contains all of the page content and not much else, in my rudimentary testing. var pageRoot = document.getElementsByClassName(''kix-appview-editor'')[0].firstChild; var observer = new MutationObserver(handleNewChanges); observer.observe(pageRoot, { subtree: true, childList: true, attributes: false, }); // Later, you can stop observing observer.disconnect();

Se handleNewChanges su función handleNewChanges cada vez que cambie el contenido del DOM, con una lista de cambios. Los cambios son bastante desordenados, pero

  • los cambios intrascendentes (como el usuario que selecciona un texto) se pueden filtrar mirando los nodos agregados y eliminados,
  • puede recorrer el árbol DOM para encontrar la ubicación de los cambios en el documento, y
  • puede usar someNode.innerText para obtener el contenido real.

Al observar los cambios y mantener un cierto estado del documento, debe poder determinar cuándo suceden los cambios que le interesan.

Esto parece una buena opción para su caso de uso, porque

  • No se necesitan servidores remotos. El flujo de datos se vería más así, completamente dentro de la pestaña del navegador:

    --------------- ---------- | Google Docs | <= fetch doc <= | Your | | Document | => DOM changes => | Module | --------------- ----------

  • Las actualizaciones se sincronizan con el documento que se actualiza visualmente, lo que se siente como algo natural para activar esto.

  • La cantidad de contabilidad que debe hacer para analizar cada cambio de DOM probablemente puede ser constante (es decir, sin recorrer el contenido del documento). Esto significaría que la sobrecarga que agrega la observación es constante, por lo que debería escalar a cualquier documento de tamaño.