• 締切済み

【Android】WebViewのテキスト選択

アプリ開発を行っているものです。 WebViewでテキスト選択した文字列を色を変えたりなど、色々操作したいと考えています。 JavaScriptを呼び出し、document.selectionなどを使用して操作しようとしています。 JavaScripの呼出まではできているのですが、選択文字列が全く取れません・・・ 下記がAndroid側とJavaScriptです。 WebViewのテキスト選択は長押しで出てくる標準機能で選択状態にしています。 <andoriod> ボタンを押下すると下記を呼び出す mWebView.loadUrl("javascript: test()"); <Javascript> function test() { var str=(document.all)?document.selection.createRange().text:(window.getSelection()+''); if(str!=''){ document.body.innerHTML=document.body.innerHTML.replace(str,'<font color="black" style="background:#ffff00;padding:5;">'+str+'</font>'); } else { str = 'sample' } Log.i("selected str",str); } 上記のプログラムでJavaScriptをPCのブラウザ(IEなど)で試すと選択文字列の色が変わります。 現状では、ログをみると選択文字列が取れてません(sampleという文字列が表示されているので) 何か方法があれば教えてください。 よろしくお願いいたします。

みんなの回答

noname#161640
noname#161640
回答No.2

あっ、失礼しました。selection.createRangeがぱっと目に入ったので思い込んでしまいました。 window.getSelectionがAndroidのChromeでとれないということでしょうか?

snishida
質問者

お礼

AndroidのWebViewというブラウザです。 Chromeと同じWebKitなので、同じJavaScriptが使えるかと思っていたのですが、なぜかうまくとれません・・・・ 下記を実行してもtrueが返ってくるので、ブラウザ自体は対応していると思うのですが、テキスト選択モードがよくないのかもしれません・・・(ブラウザの長押し、またはemulateShiftHeld()を使用してテキスト選択モードにしています) var supportsDOMRanges = document.implementation.hasFeature("Range", "2.0");

noname#161640
noname#161640
回答No.1

これは、Javaというより、JavaScriptの話になりますね。 >上記のプログラムでJavaScriptをPCのブラウザ(IEなど)で試すと選択文字列の色が変わります。 Chromeでも変わりますか? IEだけではありませんか? document.selectionとかcreateRangeなどは、IEの方言(?)で、他のブラウザでは動かなかったように思います。 var range = window.getSelection().getRangeAt(0); みたいな感じで選択範囲を取得できませんか?

snishida
質問者

お礼

ご回答ありがとうございます。 var str=(document.all)?document.selection.createRange().text:(window.getSelection()+''); の部分でIEとChromeに対応しております。 Chromeでも、選択範囲の色の変更が出来てます。 同じWebKitなのになぜAndroidからは出来ないんだろうっと悩み中です。 ご提案頂いた、やり方も試してみます。

関連するQ&A

専門家に質問してみよう