2010-06-29 31 views
13

Así que estoy trabajando en un bookmarklet en el que sería ideal para mí obtener el contenido seleccionado por el usuario mediante el "bucle". Tanto window.getSelection como document.getSelection son funciones a las que puedo llamar, sin embargo, siempre devuelven una cadena vacía.Utilice Javascript para obtener el texto seleccionado en Mobile Safari

Creo que el problema es que cuando toca el icono del marcador en Mobile Safari, se lanza la selección. Por ejemplo, si selecciona un texto, toca "+", marcador u otra pestaña, la selección no se selecciona incluso si cancela.

Alguna idea de si es posible conseguir en este dato en absoluto? ¿O es esto más o menos imposible?

+0

¿Estas seguro que window.getSelection() devuelve una cadena vacía, y no DOMSelection? No tengo acceso a Mobile Safari, pero en webkit esta función devuelve DOMSelection incluso si no hay nada seleccionado en la página. – SWilk

+0

ver también http://stackoverflow.com/questions/1936132/getselection-for-iphone-bookmarklet – cofiem

Respuesta

1

Creo que tendrías que tener el bookmarklet para insertar algún contenido en la página que operaría en la selección. Puede agregar un botón en la parte superior o inferior de la página, y cuando se haga clic en él actuará en la selección actual. Luego podría limpiar el contenido agregado o dejarlo allí.

+0

Esta es una de las soluciones que pensé después de la publicación de esta pregunta. Mi preocupación con esta solución es que no puedo pensar en una buena forma de posicionar el "botón" agregado para que sea fácilmente seleccionable. Mobile Safari no es compatible con la propiedad de CSS "posición: fija". También se añade más pasos: 1) Activar marcador 2) Seleccionar texto 3) Localizar y activar el contenido agregado del marcador vs 1) Seleccionar texto 2) Activar marcador Gracias por su sugerencia. – Nirmal

+0

Es posible que desee tomar un telar en el bookmarklet de http://amplify.com/ - hacen exactamente lo que se propone aquí y el botón sigue las acciones de desplazamiento. – FRotthowe

1

El contenido del "bucle" no está expuesto a javascript en el navegador móvil, punto. Así que esto es imposible (supongo que está trabajando en el navegador completo, no en la ventana del navegador creada cuando inicia un icono de "guardar en página de inicio")

+0

Tu publicación es un comentario y no una respuesta. Use los comentarios cuando hace una pregunta y no publica una solución. De lo contrario, no es útil. – UpHelix

+0

Es una respuesta si está trabajando en el navegador nativo. –

-1

Tengo una idea bastante simple.

var latestSelection = ""; 
while (true) 
{ 
    var tmp; 
    if ((tmp = document.getSelection()) != "") 
     latestSelection = tmp; 
} 

De esta manera siempre tendrías la última selección en la última variable de selección. Por supuesto, sería costoso tener un ciclo de ejecución como este todo el tiempo. Entonces probablemente querrás jugar con oyentes o al menos temporizadores.

Espero que esto ayude.

Actualización: No utilice el código anterior como está.

Aquí es cómo escribir lo mismo en Objective-C:

- (void) updateSelection 
{ 
    NSString * tmp = [webView stringByEvaluatingJavaScriptFromString:@"document.getSelection()"]; 
    if (![tmp isEqualToString:@""]) 
     latestSelection = tmp; 
} 

Usted podría tener un temporizador ejecutar updateSelection cada x unidades de tiempo. Si encuentra alguna buena notificación que le indique que el usuario ha interactuado con la vista web, puede usarla para actualizar la última selección.

+0

Creo que esto bloquearía el hilo de la interfaz de usuario, aunque cambiar para usar setInterval() o setTimeout() no;;) –

+0

¿Alguien puede explicar por qué se votó por esta respuesta? Explico que debes usar temporizadores u oyentes, para que no bloquees el hilo de UI. Además, si no desea escribirlo en Javascript, podría escribir fácilmente lo mismo en Objective-C. El código solo estaba explicando una idea. No estaba sugiriendo que realmente usarías ese código. –

+0

No veo por qué fue votado. Me parece útil. Acabo de votarlo. ¿Alguna idea de qué tipo de oyentes usar? Los temporizadores corren el riesgo de perder cambios en la selección que ocurre entre el último tic del temporizador y cuando ejecuta el bookmarklet. – LarsH

Cuestiones relacionadas