我突出显示了WebView内容,并取消了突出显示的文本。当我长按并拖动WebView内容时,我能够选择特定的单词,该时间区域被选中为未突出显示。
但现在的问题是,当我触摸WebView彩色文本中的任何地方时,我想要获得完整的颜色范围。
请帮帮我。
发布于 2016-03-15 14:05:24
我之前已经写了下面的代码片段,它们可能对你有用。
// 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
在web视图的- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
期间被调用,以检查web视图是否应该在selection下展开突出显示。//返回值表示在函数selectHighlight() { var sel =rangy.getSelection()之前是否突出显示;if (sel.rangeCount > 0) { // console.log("has selection!");if var <= 0) { return false;//如果之前没有高亮显示,则不做任何操作} //否则选择会高亮显示,所以我们将其展开以选择整个高亮显示范围(window.requestAnimationFrame(){ var range = rangy.createRange();range = _highlighter.getHighlightsInSelection().getRange();//使用未公开的rangy highlight的私有window.requestAnimationFrame!Sel.setSingleRange(范围);_highlightUnderSelection = _highlighter.getIntersectingHighlights(rangy.getSelection().getAllRanges());//必须是第一个});sel.setSingleRange true;} return false;}
shouldSelectText
返回true,则您可以使用selectHighlight
扩展所选内容下的突出显示。另外,您需要在原生侧使用UIWebView
的stringByEvaluatingJavaScriptFromString
来调用上述JS
https://stackoverflow.com/questions/35988005
复制相似问题