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

标签 javascript android dom android-webview textselection

我有一个带有 webview 的应用程序,我一直在尝试从 webview 的正文中获取用户选择的文本。您可能会认为操作系统能够像 iOS 那样处理某些事情,但这是 Android 完全不足的众多地方之一。我已经探索了这个网站和谷歌,没有发现任何可以帮助我的东西。幸运的是,我的应用程序有一个 javascript 接口(interface),可以与我们加载到 webview 中的脚本进行通信。我想我可以使用 javascript 从 webview 中选择文本。在 chrome 中,我可以使用以下 javascript 来做到这一点:

window.getSelection.toString();

现在我有一个按钮,它调用我的 js 文件中的一个函数,该函数将运行上述命令并将其结果返回到我的 javascript 接口(interface)中的一个方法。该消息将 toast 我的 javascript 函数的结果。所以我选择文本然后按下这个按钮。唯一的问题是我的 toast 消息返回以下消息:

javascript returned:  

什么时候返回

javascript returned: <my selected text>

当我删除 '.toString();从我的 javascript 命令中分离出来并选择文本并按下一个按钮我得到以下消息

javascript returned: undefined

为什么这不起作用?

这是我在上下文中的代码。这是被调用的 hte 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();
        }

最佳答案

找到适合我的解决方案

//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 或任何可运行接口(interface)内调用此方法,因为 post 或任何可运行接口(interface)会延迟调用此方法(方法调用发生在浏览器选择释放后)。就像调用这个方法一样

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

关于javascript - Android:window.getSelection() 在 webview 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10522610/

相关文章:

javascript - 用于存储附加信息的属性

android - TabLayout - 未找到属性的资源标识符

javascript - 如何在 "_blank"中的 anchor 标记中设置或覆盖 target= 'sanitize-html'?

javascript - 使用 jQuery 添加函数到 DOM 元素集?

javascript - 列表标签的 Value 属性在 IE 中 chop 2147483647 以上的任何内容

javascript - 获取客户端的最大int服务器端

javascript - Intl.NumberFormat 与 maximumFractionDigits

javascript - JS : Associative array access over variable?

屏幕关闭时,Android 后台位置更新不会到来

android - 将 unix/epoch 时间转换为格式化日期 - 意外日期