簡體   English   中英

Android WebView Javascript getSelection

[英]Android WebView Javascript getSelection

我在使用Android中的WebView進行選擇時遇到了一些麻煩。

我可以讓WebView進入選擇模式。 我甚至可以將它復制到ClipBoard。 但我真正想做的是永久地突出選擇。

因此,想法是將WebView置於選擇模式。 讓用戶選擇文本,然后觸發某些內容以突出顯示該文本。 我可以通過從剪貼板中獲取所選文本來使其工作,然后在Javascript中搜索它並突出顯示它。 當用戶選擇真正的常用詞時會出現問題。 我必須要么全部突出顯示它們,要么以某種方式找出選擇的位置以獲得正確的選擇。

我試過這個適用於iPhone的JavaScript。 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);
    }
}

有什么建議?

當WebView進入“選擇模式”時,WebView實際上並沒有用於選擇...它被推送到“WebTextView”(Android的武器庫中的私有類)下,模仿文本位置,但允許圖像顯示,並允許您“選擇”實際HTML中顯示的文本。 當您在“選擇”文本后嘗試與WebView交互時,問題就出現了。 高亮和光標處理位於正確的位置,但它們實際上位於我提到的特殊WebTextView中,因此您實際上沒有選擇通過JavaScript的getSelection或JavaScript中的任何其他方式。 我正在制作ACTION_DOWN(LongPress),它通過JavaScript觸發選擇和拖動的拖放和ACTION_UP從拖拽工作,但它非常多毛,而且此時並不是用戶友好...

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

檢查來源(這是模仿文本選擇而不是提供它的很多工作)這很難過,而且對於我們團隊所承擔的項目而言,目前非常痛苦 - 特別是在為iPad做同樣的應用之后......

最后,在Android 4.4 KitKat中,WebView現在基於Chromium。

因此我們可以訪問window.getSelection() !!

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

在Nexus 5和Nexus 7上測試過。

您應該嘗試rangy - 跨瀏覽器的JavaScript范圍和選擇庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM