Android:window.getSelection()在webview中不起作用

时间:2012-05-09 19:11:08

标签: javascript android dom android-webview textselection

我有一个带有webview的应用程序,我一直在尝试从webview的主体中获取用户选择的文本。您会认为操作系统能够处理类似于iOS的方式,但这是Android完全不足的许多地方之一。我已经探测过这个网站和谷歌,并没有发现任何可以帮助我的东西。幸运的是,我的应用程序有一个javascript界面​​,可以与我们加载到webview中的脚本进行通信。我以为我可以使用javascript从webview中选择文本。在chrome中,我可以使用以下javascript:

进行此操作
window.getSelection.toString();

现在我有一个按钮,它调用我的js文件中的一个函数,该函数将运行上述命令并将其结果返回到我的javascript界面​​中的方法。那条消息会干掉我的javascript函数的结果。所以我选择文字,然后按此按钮。唯一的问题是我的toast消息返回以下消息:

javascript returned:  

什么时候应该返回

javascript returned: <my selected text>

当我删除'.toString();部分来自我的javascript命令并选择文本并按下按钮我得到以下消息

javascript returned: undefined

为什么这不起作用?

这是我在上下文中的代码。这是被调用的javascript:

myNameSpace.getTextSelection = function()
        {
            var str;
            if (window.getSelection){
                str = window.getSelection().toString();
            } else {
                str = 'does not';
            }
            window.myJSHandler.getSelectedText(str);
        };

这是它调用的java函数

public void getSelectedText(String text)
        {
            String str = "function called.  it returned: " + text;
            Toast.makeText(getApplicationContext(), str, Toast.LENGTH_LONG).show();
        }

2 个答案:

答案 0 :(得分:1)

找到适用于我的解决方案

//I am using below line of code which works in both android and web browsers.

function getSelectedText() {
    var selection = null;

    if (window.getSelection) {
        selection = window.getSelection();
    } else if (typeof document.selection != "undefined") {
        selection = document.selection;
    }

    var selectedRange = selection.getRangeAt(0);

    console.log(selectedRange.toString());
}

注意:不要在post或者任何runnable接口内部调用此方法,因为post或任何runnable接口会在调用此方法时造成延迟(方法调用在浏览器选择发布后发生)。只需将此方法称为

即可
webView.loadUrl("javascript:getSelectedText()");

答案 1 :(得分:0)

因为文本选择是在Android上单独的类WebTextView上发生的,所以如果我们尝试使用javascript方法获取所选单词 -

var range = window.getSelection ();  

但是如果你想要所选的单词你可以使用反射,这个函数什么也不返回,如果你想要我稍后会添加该代码。