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