如何在iOS中获得突出显示的WebView内容的完整范围?

时间:2016-03-14 12:49:34

标签: ios objective-c rangy

enter image description here

我突出显示了WebView内容,并且我做了未突出显示的文本。当我长按并拖动WebView内容时,我能够选择特定的单词,以便选择时区以取消突出显示。

但现在问题是,当我触摸WebView彩色文本中的任何位置时,我希望获得完整的色彩范围。

请帮帮我。

1 个答案:

答案 0 :(得分:0)

我之前写过以下片段可能对您有用。

// this function only check if the selection is spanned across the highlighted span
function shouldSelectText() {
    // http://stackoverflow.com/a/6056743/510577
    var sel = rangy.getSelection();
    if (sel.rangeCount) {
        var range = sel.getRangeAt(0);
        var nodes = range.getNodes([1], function(node) {
            return node.tagName.toLowerCase() == "span"; // only need to satisfy one of open / close "span" tag, so no need to use "containsNode"
        });

        return (nodes.length <= 0);
    }
    return false;
}
    我的案例中的
  1. shouldSelectText在网络视图的- (BOOL)canPerformAction:(SEL)action withSender:(id)sender期间被调用,以检查网页视图是否应该在选择下展开突出显示。

    // the return value indicates whether it is highlighted before
    function selectHighlight() {
        var sel = rangy.getSelection();
        if (sel.rangeCount > 0) {
            // console.log("has selection!");
    
            if (_highlighter.getHighlightsInSelection().length <= 0) {
                return false; // do nothing if it is not highlighted before
            }
            // else the selection is highlighted, so we expand it to select the whole highlight
            window.requestAnimationFrame(function() {
                var range = rangy.createRange();
                range = _highlighter.getHighlightsInSelection()[0].getRange(); // use non-disclosed private API of rangy highlighter!
                sel.setSingleRange(range);
    
                _highlightUnderSelection = _highlighter.getIntersectingHighlights(rangy.getSelection().getAllRanges())[0]; // must be the first one
            });
    
            return true;
        }
        return false;
    }
    
  2. 如果shouldSelectText返回true,则您可以使用selectHighlight展开选择下的突出显示。

  3. P.S。你需要利用stringByEvaluatingJavaScriptFromString的{​​{1}}从本地调用上面的JS