Android WebView Javascript getSelection

j'ai un peu de mal à obtenir la sélection à partir d'un WebView sous Android.

je peux obtenir le WebView pour passer en mode de sélection. Je peux même le faire copier le texte dans le bloc-notes. Mais ce que je veux vraiment faire, c'est mettre en valeur la sélection de façon permanente.

L'idée est donc de mettre le WebView en mode select. Laissez l'utilisateur sélectionner le texte, puis tirez quelque chose pour mettre en évidence ce texte. Je peux le faire fonctionner en obtenant le texte sélectionné dans le presse-papiers, puis recherchez-le dans Javascript et mettez-le en surbrillance. Le problème se produit lorsque l'utilisateur sélectionne un vrai mot. Je dois les mettre en évidence tous ou trouver où est la sélection pour obtenir le bon.

j'ai essayé ce JavaScript qui fonctionne sur l'iPhone. Bu getSelection () ne semble pas fonctionner sur L'Android.

function highlight(colour) {
    var range, sel;
    if (window.getSelection) {
            // Non-IE case
        sel = window.getSelection();
        if (sel.getRangeAt) {
            range = sel.getRangeAt(0);
        }
        document.designMode = "on";
        if (range) {
            sel.removeAllRanges();
            sel.addRange(range);
        }
            // Use HiliteColor since some browsers apply BackColor to the whole block
        if ( !document.execCommand("HiliteColor", false, colour) ) {
            document.execCommand("BackColor", false, colour);
        }
        document.designMode = "off";
    } else if (document.selection && document.selection.createRange) {
            // IE case
        range = document.selection.createRange();
        range.execCommand("BackColor", false, colour);
    }
}

des suggestions?

25
demandé sur Bob Keathley 2011-02-04 00:46:24
la source

3 ответов

lorsque le WebView est en Mode "Sélection", le WebView n'est pas réellement utilisé pour la sélection... Il est poussé sous une" WebTextView "(classe privée dans l'arsenal D'Android) qui imite la position du texte, mais permet aux images de montrer à travers, et vous permet de" sélectionner " le texte qui apparaît dans le HTML réel. Le problème vient quand vous essayez d'interagir avec le WebView après avoir "sélectionné" le texte. Les poignées de surlignage et de curseur sont dans la bonne position, mais elles sont en fait le WebTextView spécial que j'ai mentionné, donc vous n'avez pas réellement une sélection à obtenir via la getSelection de JavaScript, ou tout autre moyen dans JavaScript. Je travaille à faire fonctionner pour moi L'ACTION_DOWN (de LongPress) qui déclenche la sélection et la drag et ACTION_UP de la sortie de drag via JavaScript, mais c'est très délicat, et pas du tout convivial à ce stade...

http://www.java2s.com/Open-Source/Android/android-core/platform-frameworks-base/android/webkit/WebTextView.java.htm

vérifier la source(c'est beaucoup de travail pour imiter la sélection de texte au lieu de les fournir) C'est triste, et actuellement très douloureux pour un projet, notre équipe a entrepris, surtout après avoir fait la même application pour iPad...

9
répondu Dan 2011-09-27 04:53:08
la source

Donc nous avons accès à window.getSelection()!!

wv.evaluateJavascript("console.log(window.getSelection().baseNode.nodeValue);", null);

testé sur Nexus 5 et Nexus 7.

2
répondu CodingIntrigue 2013-11-05 16:31:15
la source

Vous devriez essayer longiligne - une bibliothèque de sélection et de gamme JavaScript pour navigateur croisé.

0
répondu spektom 2011-06-22 12:24:19
la source

Autres questions sur