Android WebView Javascript getSelection - PullRequest
       15

Android WebView Javascript getSelection

25 голосов
/ 04 февраля 2011

У меня возникли проблемы с получением выбора из WebView в Android.

Я могу заставить WebView перейти в режим выбора.Я даже могу получить его, чтобы скопировать текст в буфер обмена.Но то, что я действительно хочу сделать, это выделить выбор навсегда.

Итак, идея заключается в переводе 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);
    }
}

Есть предложения?

Ответы [ 3 ]

9 голосов
/ 09 августа 2011

Когда WebView переходит в «Режим выбора», WebView фактически не используется для выделения ... Он помещается в «WebTextView» (закрытый класс в арсенале Android), который имитирует положение текста, но позволяет изображениямчтобы показать, и позволяет вам «выбрать» текст, который появляется в реальном HTML.Проблема возникает, когда вы пытаетесь взаимодействовать с WebView после «выделения» текста.Дескрипторы выделения и курсора находятся в правильном положении, но на самом деле они находятся в специальном WebTextView, о котором я упоминал, поэтому у вас фактически нет выбора, чтобы получить через JavaScript getSelection или любые другие средства в JavaScript.Я работаю над созданием ACTION_DOWN (из LongPress), который запускает выделение, а также перетаскивание и ACTION_UP релиза от перетаскивания работают для меня через JavaScript, но это очень сложно и совсем не удобно для пользователя ...

http://www.java2s.com/Open-Source/Android/android-core/platform-frameworks-base/android/webkit/WebTextView.java.htm

проверить источник (это большая работа, чтобы имитировать выделение текста, а не предоставлять его). Это печально, и в настоящее время очень болезненно для проекта, который предприняла наша команда - особеннопосле того же приложения для iPad ...

2 голосов
/ 05 ноября 2013

Наконец, в Android 4.4 KitKat WebView теперь основан на Chromium.

Поэтому у нас есть доступ к window.getSelection() !!

wv.evaluateJavascript("console.log(window.getSelection().baseNode.nodeValue);", null);

Проверено на Nexus 5 и Nexus 7.

0 голосов
/ 22 июня 2011

Вы должны попробовать rangy - Кросс-браузерный диапазон JavaScript и библиотека выбора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...