1

私は webview を備えたアプリを持っており、webview の本文からユーザーが選択したテキストを取得しようとしています。オペレーティング システムは iOS と同じように処理できると思うかもしれませんが、これは Android がまったく不十分な多くの場所の 1 つです。私はこのウェブサイトとグーグルを調べましたが、私を助けるものは何も見つかりませんでした. 私のアプリには、幸いなことに、webview にロードするスクリプトと通信するための JavaScript インターフェイスがあります。javascript を使用して webview からテキストを選択できると思いました。クロムでは、次のJavaScriptでこれを行うことができます:

window.getSelection.toString();

現在、上記のコマンドを実行し、その結果を JavaScript インターフェイスのメソッドに返す js ファイル内の関数を呼び出すボタンがあります。そのメッセージは、私の JavaScript 関数の結果を乾杯します。だから私はテキストを選択してからこのボタンを押します。唯一の問題は、トースト メッセージが次のメッセージを返すことです。

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();
        }
4

2 に答える 2

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());
}

注 : ポストまたは実行可能なインターフェイス内でこのメソッドを呼び出さないでください。ポストまたは実行可能なインターフェイスがこのメソッドの呼び出しを遅らせるためです (メソッドの呼び出しは、ブラウザーの選択が解除された後に発生します)。このメソッドを次のように呼び出すだけです

webView.loadUrl("javascript:getSelectedText()");
于 2018-03-24T12:42:26.653 に答える
0

テキストの選択はAndroidの別のクラスWebTextViewで行われるため、javascriptメソッドを使用して選択した単語を取得しようとすると-

var range = window.getSelection ();  

ただし、選択した単語が必要な場合、この関数は何も返しません。必要に応じて、後でそのコードを追加する場合に備えて、リフレクションを使用できます。

于 2012-11-19T08:54:13.120 に答える