Android WebView Javascript getSelection

Android WebView Javascript getSelection,javascript,android,webview,Javascript,Android,Webview,我在Android中从网络视图中获取选择时遇到了一些问题 我可以让WebView进入选择模式。我甚至可以让它把文本复制到剪贴板上。但我真正想做的是永久地突出显示选择 因此,我们将WebView置于选择模式。让用户选择文本,然后激发一些内容以突出显示该文本。我可以通过从剪贴板中获取所选文本,然后在Javascript中搜索并突出显示它来让它工作。当用户选择一个真正的常用词时,就会出现问题。我要么把它们全部突出显示出来,要么找出正确的选择 我已经尝试过在iPhone上运行的JavaScript。Bu

我在Android中从网络视图中获取选择时遇到了一些问题

我可以让WebView进入选择模式。我甚至可以让它把文本复制到剪贴板上。但我真正想做的是永久地突出显示选择

因此,我们将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);
    }
}

有什么建议吗?

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

当WebView进入选择模式时,WebView实际上不用于选择。。。它被推到Android的Arsential中的WebTextView私有类下,该类模仿文本位置,但允许图像显示,并允许您选择实际HTML中显示的文本。 当您在选择文本后尝试与WebView交互时,就会出现问题。 突出显示和光标句柄位于正确的位置,但它们实际上位于我提到的特殊WebTextView中,因此您实际上没有通过JavaScript的getSelection或JavaScript中的任何其他方式获得选择。 我正在努力使LongPress的ACTION\u DOWN触发选择,并通过JavaScript使drag发布的drag和ACTION\u UP对我起作用,但它非常复杂,而且在这一点上对用户不友好

检查源代码模拟文本选择而不是提供文本选择需要大量工作
对于我们团队承担的一个项目来说,这是一件悲哀的事情,而且目前非常痛苦——特别是在为iPad开发了相同的应用程序之后……

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

因此我们可以访问window.getSelection


在Nexus 5和Nexus 7上测试。

如何让它将文本复制到剪贴板?您是以编程方式进行选择,还是依靠用户手动进行选择。这方面有什么进展吗?如何获取所选内容的WebTextView实例?您不能。它是一个shell,提供存在于WebView中的文本,但不能访问WebView本身。。。我使用Java在选择过程中捕获运动,使用JavaScript在WebView本身中启用选择。请给我发送一些代码,我需要中所选单词的id和标记名webview@Dainel与您在任何其他平台上使用它的方式相同-rangy只是一组JavaScript文件。在android中,getSelection不会返回任何内容那么有可能是rangy吗?如果使用evaluateJavascript,为什么不使用ValueCallback的返回值呢?evaluateJavascriptfunction{return window.getSelection.baseNode.nodeValue},新值回调{@Override public void onReceiveValueString值{Log.vTAG,SELECTION:+value;};}你在Android 19+上试过这个吗?“这对我一点用都没有。”安吉尔克约塞斯基说
wv.evaluateJavascript("console.log(window.getSelection().baseNode.nodeValue);", null);