2010-06-29 14 views
13

Quindi sto lavorando a un bookmarklet in cui sarebbe ideale per me afferrare il contenuto selezionato dall'utente utilizzando il "loop". Sia window.getSelection che document.getSelection sono funzioni che posso chiamare, tuttavia restituiscono sempre una stringa vuota.Usa Javascript per ottenere il testo selezionato in Mobile Safari

Credo che il problema è che quando si tocca l'icona del segnalibro in Mobile Safari, la selezione viene rilasciata. Ad esempio, se selezioni del testo, tocca "+", un segnalibro o un'altra scheda, la selezione non è selezionata anche se annulli.

Qualche idea su se è possibile ottenere a tutti questi dati? O è praticamente impossibile?

+0

Sei sicuro che window.getSelection() restituisce una stringa vuota e non DOMSelection? Non ho accesso a Mobile Safari, ma nel webkit questa funzione restituisce DOMSelection anche se nella pagina non è selezionato nulla. – SWilk

+0

vedere anche http://stackoverflow.com/questions/1936132/getselection-for-iphone-bookmarklet – cofiem

risposta

1

Penso che dovresti avere il bookmarklet inserire del contenuto nella pagina che opererebbe sulla selezione. È possibile aggiungere un pulsante all'inizio o alla fine della pagina e, una volta cliccato, agirebbe sulla selezione corrente. Potrebbe quindi ripulire il contenuto aggiunto o lasciarlo lì.

+0

Questa è una delle soluzioni a cui ho pensato dopo aver postato questa domanda. La mia preoccupazione per questa soluzione è che non riesco a pensare a un buon modo per posizionare il "pulsante" aggiunto in modo che sia facilmente selezionabile. Mobile Safari non supporta la proprietà CSS "position: fixed". Inoltre aggiunge ulteriori passaggi: 1) Attivare segnalibro 2) Selezionare il testo 3) Individuare e attivare il contenuto aggiunto di segnalibro vs. 1) Scegliere un testo 2) Attivare segnalibro Grazie per il suggerimento. – Nirmal

+0

Si potrebbe desiderare di prendere un telaio sul bookmarklet da http://amplify.com/ - fanno esattamente ciò che viene proposto qui e il pulsante segue le azioni di scorrimento. – FRotthowe

1

I contenuti del "loop" non sono esposti a javascript nel browser mobile, punto. Quindi questo è impossibile (Io parto dal presupposto che si sta lavorando nel pieno del browser, non nella finestra del browser creato quando si lancia un icona "salvato alla home page")

+0

Il tuo post è un commento e non una risposta. Utilizzare i commenti quando si fa una domanda e non si pubblica una soluzione. Altrimenti non è utile. – UpHelix

+0

È una risposta se sta lavorando nel browser nativo. –

-1

ho una abbastanza semplice idea.

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

In questo modo si avrà sempre l'ultima selezione nella variabile Ultima selezione. Naturalmente sarebbe costoso avere un ciclo continuo come questo tutto il tempo. Quindi probabilmente vorrai giocare con gli ascoltatori o almeno i timer.

Spero che questo aiuti.

Aggiornamento: Non utilizzare il codice sopra così com'è.

Ecco come si può scrivere la stessa cosa in Objective-C:

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

Si potrebbe avere un timer di eseguire updateSelection ogni x unità di tempo. Se trovi qualche buona notifica che ti consente di sapere che l'utente ha interagito con la webview, puoi usarla per aggiornare latestSelection.

+0

Penso che questo bloccherebbe il thread dell'interfaccia utente, anche se la modifica per utilizzare setInterval() o setTimeout() non lo sarebbe,;) –

+0

Qualcuno può spiegare perché questa risposta è stata rifiutata? Spiego che dovresti usare timer o listener, in modo da non bloccare il thread dell'interfaccia utente. Inoltre, se non vuoi scriverlo in Javascript, potresti facilmente scrivere la stessa cosa in Objective-C. Il codice stava solo spiegando un'idea. Non stavo suggerendo che avresti effettivamente usato quel codice. –

+0

Non vedo perché è stato rifiutato. Mi sembra utile. L'ho solo votato. Qualche idea su che tipo di ascoltatori usare? I timer corrono il rischio di perdere le modifiche alla selezione che si verificano tra l'ultimo tick tick e quando si esegue il bookmarklet. – LarsH

Problemi correlati