以编程方式在UIWebView中选择文本

经过2天的研究,我问这个问题。 我已经阅读了stackoverflow和google中的所有相关问题和答案(包括这个问题,这是非常相似但没有答案)仍然无法找到解决方案。 希望有人能够提供帮助。

我有一个UIWebView,其中加载了一些文本。 我想以编程方式选择部分文本,就像用户长按它一样。

我已经尝试执行此javascript代码作为对点击的响应:

function selectEl(x,y) { document.designMode = "on"; var el = document.elementFromPoint(x, y); var range = document.createRange(); range.selectNodeContents(el); var sel = document.getSelection(); sel.removeAllRanges(); sel.addRange(range); document.designMode = "off"; } 

我已尝试过,无需在设计结束时将designMode更改为“off”。 我知道这段代码“选择”了正确的元素,因为如果我执行这个命令

 document.execCommand("BackColor", false, "#ffffcc"); 

它实际上突出显示了我单击的元素,但它不会导致选择文本。 关于如何实现这一点的任何想法?

这似乎是Mobile Safari中的一个错误。 当我在touchstart contentEditable切换为true并在touchend其设置为false时,它可以正常工作。 如果我删除这些行并刷新它仍然有效。 如果我关闭Mobile Safari,清除缓存,然后重新打开删除行的文档,它将再次停止工作。

我已经使用工作版更新了下面的代码(虽然为了简单起见我删除了长按)。

      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam tempus volutpat mauris sed porta. Phasellus euismod malesuada eleifend. Donec mattis, orci quis scelerisque mattis, turpis sem pulvinar nisi, et sagittis nunc nisi sed nulla. Pellentesque pharetra consequat neque, ultrices mattis mauris auctor id. Aenean tincidunt turpis non odio gravida semper. Praesent feugiat, lorem at lacinia tristique, orci eros tincidunt leo, at adipiscing sapien felis at tellus. Phasellus ac est nec nibh posuere euismod vel vitae neque. Vestibulum mollis adipiscing urna ut tristique. Vivamus purus tortor, venenatis id aliquam nec, elementum et lacus. Praesent elementum purus eget sapien ornare laoreet. Vestibulum ac odio enim.    

只是一个想法:确保你没有在你的CSS中使用这样的东西:

 * { -webkit-touch-callout: none; -webkit-user-select: none; user-select: none; } 

这可以防止任何文本选择。

我遇到了这个:

 hitElem.style.backgroundColor = "highlight"; hitElem.style.color = "highlighttext"; 

或者, 本网站已经编写了一些可怕的脚本,但它可以帮助你:)它适用于范围。