Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 以编程方式选择UIWebView中的文本_Javascript_Iphone_Ios_Uiwebview - Fatal编程技术网

Javascript 以编程方式选择UIWebView中的文本

Javascript 以编程方式选择UIWebView中的文本,javascript,iphone,ios,uiwebview,Javascript,Iphone,Ios,Uiwebview,经过两天的研究,我提出了这个问题。我已经阅读了stackoverflow和google中所有相关的问题和答案(包括问题,非常相似但没有答案),但仍然找不到解决方案。希望这里有人能帮忙 我有一个UIWebView,其中加载了一些文本。我希望以编程方式选择文本的一部分,就像用户长时间按下它一样 我尝试执行此javascript代码作为对单击的响应: function selectEl(x,y) { document.designMode = "on"; var el = docume

经过两天的研究,我提出了这个问题。我已经阅读了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";
}
我尝试过在函数结束时将设计模式更改为“关闭”,也尝试过不更改。 我知道这个代码“选择”了正确的元素,因为如果我执行这个命令

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

它实际上会高亮显示我单击的元素,但不会导致选择文本。关于如何实现这一点有什么想法吗?

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

我已经用一个工作版本更新了下面的代码(尽管为了简单起见我删除了长按)


(功能(){
变量节点,
范围
抵消,
clientX,
客户;
document.addEventListener(“DOMContentLoaded”,function()){
document.body.addEventListener(“touchstart”),函数(事件){
var selection=window.getSelection();
selection.removeAllRanges();
clientX=event.touchs[0].clientX;
clientY=event.touchs[0]。clientY;
范围=document.caretRangeFromPoint(clientX,clientY);
节点=range.startContainer;
偏移=range.startOffset;
document.body.contentEditable=“true”;
event.preventDefault();
});
document.body.addEventListener(“触摸移动”,函数(事件){
var selection=window.getSelection(),
范围=document.caretRangeFromPoint(event.touchs[0].clientX,event.touchs[0].clientY),
newRange=document.createRange();
if(clientY
只是一个想法:确保在css中没有使用类似的内容:

* {
  -webkit-touch-callout: none;
   -webkit-user-select: none;
   user-select: none;
}
这将阻止任何文本选择。

我遇到了以下问题:

hitElem.style.backgroundColor = "highlight";
hitElem.style.color = "highlighttext";
或者,
已经编写了一些糟糕的脚本,但它可能会帮助您:)它适用于范围。

因此,在阅读这篇文章之后,仍然存在问题???我已经看到了这个链接,但它没有描述如何实现我所需要的。无论如何,谢谢。如果这对你没有帮助,那么这意味着你的问题是其他的???看到这个了吗?我把这个html加载到UIWebView,当我点击文本时什么也没有发生。我遗漏了什么吗?按住(不要移动手指)然后拖动,如果你第一次在Mobile Safari中尝试它,你可以看到标题-当它显示“true”时,你可以开始拖动。很抱歉,它根本不起作用。我试图在“touchmove”事件侦听器的末尾添加一个警报,即使显示了警报,也没有选择任何文本。该警报会撤消选择,不是吗。。?试试console.log而不是我说的,放大镜会把事情搞砸的。为了演示,我更新了答案并在touchstart中添加了一个
preventDefault
。现在试试看。真的,你不想那样。您可能还想减少计时器的超时时间。谢谢您的提示,但您可以看到我在问题中写道,文本实际上已被选中,但我没有看到标记和周围的蓝色突出显示。我非常感谢没有评论的否决票…-\不
hitElem.style.backgroundColor = "highlight";
hitElem.style.color = "highlighttext";