Sto creando uno strumento di annotazione basato sul Web, in cui gli utenti finali possono selezionare e annotare una sezione di testo da un documento HTML. A livello di programmazione, l'accesso e il lavoro con il testo selezionato e l'intervallo corrispondente sono intuitivi usando "window.getSelection" e "getRangeAt".Come supportare più selezioni di testo su browser incrociato?
Sto incontrando un problema, tuttavia, quando provo a mettere tutto questo insieme in un'applicazione cross-browser. Tutto funziona in Firefox, ma in Safari ho notato immediatamente che quando faccio clic su un pulsante HTML (ad esempio il pulsante "annotazione"), la selezione del testo utente corrente scompare, come se facendo clic sul pulsante riposizionasse il cursore di testo. Il mio codice che tenta di accedere a window.getSelection viene eseguito da uno script in questo pulsante, che segnala quindi che non esiste alcuna selezione.
Ho scavato e ho dato un'occhiata a come Google Docs, in particolare la loro applicazione di elaborazione testi gestisce questo, come essenzialmente il comportamento e la meccanica di selezione del testo e facendo clic su "Grassetto" o "Cambia carattere" corrisponde alla mia funzione di annotazione. In Google Documenti, caricano il testo del documento da modificare in un iframe. Giocando con questo, ho imparato che Firefox immediatamente supporta diversi intervalli di selezione in una pagina web che contiene più frame o iframe. In altre parole, posso selezionare una sezione di testo nella pagina di base e una sezione separata del testo nell'iframe senza che la prima selezione scompaia. Questa soluzione di Google Documenti funziona sia per Firefox che per Safari (i due browser a cui sono interessato). Ma quando ho creato una semplice pagina di esempio per testare questa soluzione, non funzionerebbe in Safari. Non appena faccio clic su un pulsante o effettuo la selezione del testo nella pagina principale (al di fuori dell'iframe), il testo selezionato dell'iframe corrente scompare.
Qualcuno sa cosa mi manca qui per farlo funzionare? O hai un suggerimento su un altro modo per farlo funzionare?
hai questo da qualche parte a cui potresti collegare? – Jack