我突出显示了WebView内容,并且我做了未突出显示的文本。当我长按并拖动WebView内容时,我能够选择特定的单词,以便选择时区以取消突出显示。
但现在问题是,当我触摸WebView彩色文本中的任何位置时,我希望获得完整的色彩范围。
请帮帮我。
答案 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;
}
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;
}
如果shouldSelectText
返回true,则您可以使用selectHighlight
展开选择下的突出显示。
P.S。你需要利用stringByEvaluatingJavaScriptFromString
的{{1}}从本地调用上面的JS