Problema: lector de formato ePub basado en Android WebView -Android 3.x SÓLO WebView selección de texto + JavaScript
Necesitamos más destacado de texto que se puede acceder a través de métodos de JavaScript (es decir, convertir em en, a su vez em off, guardarlos enviarlas por correo electrónico, etc.)
Cualquier persona en el saber, por favor, corríjanme si me equivoco: Durante la selección del texto en una vista Web -
Básicamente estamos presentaron una superposición de Vista de texto (WebTextView), que no es en absoluto MANERA unida al html subyacente que no sea visualmente (buen trabajo al alinearlo todo y hacerlo sin interrupciones, por cierto), o n en el que realizamos TextSelectionActionMode y ClipboardManager se suministra con los resultados ... para dejarlo claro, el HTML real con WebView NO se selecciona en realidad en ningún momento durante este proceso de inventario, por lo que JavaScript no puede acceder a los resultados de la acción.
Para hacer que este comportamiento funcione en 3.1+, tengo algunos posibles planes para implementar mi propia selección en una WebView: esta es la parte en la que me pregunto si no puedo ver fuera de mi corner :) -
1) captura MOTION_DOWN del clic largo que inicia el modo de selección, anula el modo de acción TextSelection incorporado (para proporcionar a los clientes la marca - la forma en que lo hice es tan hackish que duele) arrastre, capture la posición MOTION_UP, asigne estos coords al WebView, y realice mi selección en función de los coords (mientras compara el texto con el capturado por el ClipboardManager)
2) crear mi propia "WebTextView" (toda la lotta work jajaja) y no tan hackosamente crear mi propio ActionMode y hacer todo lo anterior.
3) utilice los MotionEvents generados por el proceso de selección de valores y anule de algún modo el stock Action Mode de selección de acciones provocado por este.
Estas son las opciones que veo, con suerte mi proximidad y frustración con esto me han cegado a una solución más simple (léala como incorporada) o dos.
Gracias de nuevo por su tiempo.
confiar en la reflexión es doloroso, por decir lo menos ... confiar en javascript es igualmente doloroso (como ahora sé, mi solución está rota en WebView 4.0, trabajando en el "cómo" mientras escribo) en Javascript, document.getSelection() devuelve el objeto Selection, desde el cual puede recopilar la ubicación real en términos de documento https://developer.mozilla.org/en/DOM/window.getSelection (se aplica a la interfaz de documento o ventana) No confiaría en nada derivado de la reflexión en el mundo de Android; simplemente, lo romperán. Dicho todo esto, ¡ese es un buen plan de copia de seguridad si fallara el javascript! – Dan
¿Cómo está activando ese document.getSelection()? Intentémoslo originalmente y descubrimos que cargar javascript a través de loadUrl ("javascript: document.getSelection()"); causó que la selección se borrara por lo que no había nada allí. – smokingoyster
tiene que hacer el trabajo pesado dentro de la vista web con javascript, y devolver una Cadena (en mi caso) delimitada por tuberías con los datos pertinentes que está buscando. es decir, utilice JavaScriptInterface como receptor para el objeto de selección "aplanado" que se genera dentro de javascript. Además, dependiendo de lo que esté haciendo con esa información (utilicé la mía para la selección en tiempo real), tenga en cuenta que la entrega al subproceso de la interfaz de usuario será necesaria (ya que probablemente NO se encuentre en el subproceso de interfaz de usuario). por lo que un patrón de Handler puede ser, bueno, útil ... – Dan