【问题标题】:Android: window.getSelection() does not work in webviewAndroid:window.getSelection() 在 webview 中不起作用
【发布时间】:2012-05-18 08:28:39
【问题描述】:

我有一个带有 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

为什么这不起作用?

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

【问题讨论】:

    标签: javascript android dom android-webview textselection


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

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

    【讨论】:

      【解决方案2】:

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

      var range = window.getSelection ();  
      

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

      【讨论】:

      • Ravi,请添加此反射
      猜你喜欢
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-15
      • 2011-11-24
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      相关资源
      最近更新 更多