在 iOS Mobile Safari 和/或 UIWebView 中控制文本选择行为?
Posted
技术标签:
【中文标题】在 iOS Mobile Safari 和/或 UIWebView 中控制文本选择行为?【英文标题】:Control text selection behavior in iOS Mobile Safari and/or UIWebView? 【发布时间】:2014-03-05 07:55:57 【问题描述】:我有一个包含多个段落的长 html 文档。当我尝试在 ios 上的 Mobile Safari 或 UIWebView 中选择文本时,会发生以下情况:
-
首先,我在选择时获得了字符级精度。
然后,当我选择更多时,精度下降到两行文本,最终下降到整个段落。没有办法在我想要的地方准确地结束我的文本选择。
当我将 CSS contentEditable
属性设置为 true
时,我保留了字符级精度,但键盘也出现了,这当然是我不想要的。
无论我选择多长的文本,有什么方法可以保持字符级别的选择精度?
【问题讨论】:
你是用还是来换行?
@Unykvis 有许多不同的块和内联元素用于样式(div、spans 等)。 您能否尝试使用与该块分开来制作 2 个段落?我认为你真的需要在他们之间有
。
@Unykvis 谢谢,但我对一个通用解决方案感兴趣,我可以将其应用于现有文档而无需修改其结构或标记。 如果不修改网页结构,您将无法找到通用解决方案——您无法编辑移动 Safari 处理文本选择的方式... 【参考方案1】:我遇到了同样的问题,
我通过一行 CSS 解决了这个问题:
display: inline-block;
两者都适用于 Safari 和 WebView。
【讨论】:
谢谢。您能否更详细地解释一下这是如何解决这个问题的,尤其是在加载任意网站时?【参考方案2】:iOS 8 的WKWebView
或许能够解决这个问题。 WKWebViewConfiguration
有一个名为 selectionGranularity
的属性。评论内容如下:
用户可以交互选择的粒度级别 Web 视图中的内容。可能的值在 WK选择粒度。默认值为 WKSelectionGranularityDynamic。
两个可能的值之一是WKSelectionGranularityCharacter
。评论说:
选择端点可以放置在任何字符边界。
我还没有尝试过,但听起来很有希望!
7/6/15 更新:看起来没那么容易:Text Selection in WKWebView: WKSelectionGranularityCharacter
2015 年 7 月 10 日更新:当您仔细研究 iOS Kindle 应用程序时,您会发现他们在 javascript 中重新实现了“原生”文本选择,因为它们无法制作原生文本选择按照他们想要的方式行事。我很确定他们在决定重新实施之前一定已经尝试了其他所有方法。
【讨论】:
【参考方案3】:你可以使用 CSS 属性来阻止用户选择文本。 你可以像这样使用:
html
user-select:none;
【讨论】:
谢谢,但我想要选择文本,但要以更精确的方式。【参考方案4】:由于您还选择了文本的标题,因此浏览器会将其识别为完整的文本并选择整个段落。 顺便说一句,不看HTML源代码就帮不了你!
【讨论】:
以上是关于在 iOS Mobile Safari 和/或 UIWebView 中控制文本选择行为?的主要内容,如果未能解决你的问题,请参考以下文章
iOS Safari Mobile 不会仅触发一次页面显示触发
iOS 6.1.3 Mobile Safari / UIWebView 发送错误的区域设置区域代码
div背景图像和iOS Mobile Safari兼容性问题