Подтвердить что ты не робот

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

Любые предложения?

4b9b3361

Ответ 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 и библиотека выбора.