在 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 5.1 和 Safari Mobile 限制

iOS Safari Mobile 不会仅触发一次页面显示触发

iOS 6.1.3 Mobile Safari / UIWebView 发送错误的区域设置区域代码

div背景图像和iOS Mobile Safari兼容性问题

Appium和iOS Mobile Safari自动化,能做到吗?

iOS 7 Safari 干扰 jQuery Mobile 页脚