【发布时间】:2012-01-15 18:56:27
【问题描述】:
我正在使用 UIWebView 为 iOS 开发图书阅读器。目前我正在使用一些基本的 HTML 文件,但最终将使用 ePubs。我正在寻找一种合适的方式来设置文本范围。我的范围有点特别,因为它们通常包含三个范围 - 一个键范围和一个紧接在之前的范围和紧接在之后的范围。键范围可以跨越多个节点,并且可以在例如选择的粗体文本等中开始或结束。不应将样式写入文件。
目前我有一个可行的解决方案如下:
document.designMode = "on";
// Color the first section
var selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range1);
if (!selection.isCollapsed){
document.execCommand("foreColor", false, color1);
}
// Color the middle section
selection.removeAllRanges();
selection.addRange(range2);
if (!selection.isCollapsed){
document.execCommand("backColor", false, color2);
document.execCommand("foreColor", false, color3);
}
// Color the last section
selection.removeAllRanges();
selection.addRange(range3);
if (!selection.isCollapsed){
document.execCommand("foreColor", false, color1);
}
document.designMode = "off";
selection.removeAllRanges();
即使我修改它以突出显示简短 HTML 文档中的单个范围,它也可以正常工作,但速度很慢(在 iPad2 上)。在对文本进行风格化之前,总会有一个非常明显的延迟。在 iPad 上查看电子书阅读器(例如 kindle 或 iBooks)没有明显的延迟。他们如何实现高亮功能?他们可能正在阅读所选文本上的地理位置并应用某种叠加层吗?
我已经寻找了比我已经使用的更好的解决方案,但没有运气,所以如果有人有想法,我将非常感激。
谢谢!
【问题讨论】:
标签: javascript ios uiwebview highlighting