Android WebView Javascript getSelection
У меня возникают проблемы с выбором из WebView на Android.
Я могу заставить WebView перейти в режим выбора. Я даже могу заставить его скопировать текст в ClipBoard. Но я действительно хочу подчеркнуть выбор навсегда.
Итак, идея заключается в том, что WebView находится в режиме выбора. Пусть пользователь выбирает текст, а затем запускает что-то, чтобы выделить этот текст. Я могу заставить его работать, получив выделенный текст из буфера обмена, а затем ищите его в Javascript и выделите его. Проблема возникает, когда пользователь выбирает реальное общее слово. Я должен либо выделить их всех, либо как-то выяснить, где выбор, чтобы получить правильный.
Я пробовал этот JavaScript, который работает на iPhone. Bu getSelection(), похоже, не работает на Android.
function highlight(colour) {
var range, sel;
if (window.getSelection) {
// Non-IE case
sel = window.getSelection();
if (sel.getRangeAt) {
range = sel.getRangeAt(0);
}
document.designMode = "on";
if (range) {
sel.removeAllRanges();
sel.addRange(range);
}
// Use HiliteColor since some browsers apply BackColor to the whole block
if ( !document.execCommand("HiliteColor", false, colour) ) {
document.execCommand("BackColor", false, colour);
}
document.designMode = "off";
} else if (document.selection && document.selection.createRange) {
// IE case
range = document.selection.createRange();
range.execCommand("BackColor", false, colour);
}
}
Любые предложения?
Ответы
Ответ 1
Когда WebView переходит в "Режим выбора", WebView фактически не используется для выбора... Он подталкивается под "WebTextView" (частный класс в арсенале Android), который имитирует текстовую позицию, но позволяет изображениям для показа и позволяет вам "выбрать" текст, который отображается в фактическом HTML.
Проблема возникает, когда вы пытаетесь взаимодействовать с WebView после "выбора" текста.
Ручки выделения и курсора находятся в правильном положении, но на самом деле они находятся в специальном WebTextView, о котором я упоминал, поэтому на самом деле у вас нет выбора для получения через getSelection JavaScript или любых других средств в JavaScript.
Я работаю над созданием ACTION_DOWN (из LongPress), который вызывает выбор, а drag и ACTION_UP релиза от перетаскивания работают для меня с помощью JavaScript, но он очень волосатый и совсем не удобен для пользователя на этом этапе...
http://www.java2s.com/Open-Source/Android/android-core/platform-frameworks-base/android/webkit/WebTextView.java.htm
проверьте источник (что много работы для имитации выбора текста, а не для его предоставления)
Печально, и в настоящее время очень больно для проекта, который наша команда предприняла - особенно после того, как вы сделали то же самое приложение для iPad...
Ответ 2
Наконец, в Android 4.4 KitKat WebView теперь основан на Chromium.
Поэтому мы имеем доступ к window.getSelection()
!!
wv.evaluateJavascript("console.log(window.getSelection().baseNode.nodeValue);", null);
Протестировано на Nexus 5 и Nexus 7.
Ответ 3
Вы должны попробовать rangy - кросс-браузерный диапазон JavaScript и библиотека выбора.