首页 文章

Android WebView Javascript getSelection

提问于
浏览
25

我在使用Android中的WebView进行选择时遇到了一些麻烦 .

我可以让WebView进入选择模式 . 我甚至可以将它复制到ClipBoard . 但我真正想做的是永久地突出选择 .

因此,想法是将WebView置于选择模式 . 让用户选择文本,然后触发某些内容以突出显示该文本 . 我可以通过从剪贴板中获取所选文本来使其工作,然后在Javascript中搜索它并突出显示它 . 当用户选择真正的常用词时会出现问题 . 我必须要么突出显示它们,要么以某种方式找出选择的位置以获得正确的选择 .

我试过这个适用于iPhone的JavaScript . Bu getSelection()似乎不适用于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);
    }
}

有什么建议?

3 回答

  • 9

    当WebView进入“选择模式”时,WebView实际上并没有被用于选择...它被推送到“WebTextView”(Android的武器库中的私有类),模仿文本位置,但允许图像显示,并允许您“选择”实际HTML中显示的文本 . 当您在“选择”文本后尝试与WebView交互时,问题就出现了 . 高亮和光标处理位于正确的位置,但它们实际上位于我提到的特殊WebTextView中,因此您实际上没有选择通过JavaScript的getSelection或JavaScript中的任何其他方式 . 我正在制作ACTION_DOWN(LongPress),它通过JavaScript触发选择和拖动的拖放和ACTION_UP从拖拽工作,但它非常多毛,而且此时并不是用户友好...

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

    检查来源(这是模仿文本选择而不是提供它的很多工作)这很难过,而且对于我们团队所承担的项目而言,目前非常痛苦 - 特别是在为iPad做同样的应用之后......

  • 0

    最后,在Android 4.4 KitKat中,WebView现在基于Chromium .

    因此我们可以访问 window.getSelection() !!

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

    在Nexus 5和Nexus 7上测试过 .

  • 2

    您应该尝试rangy - 跨浏览器的JavaScript范围和选择库 .

相关问题