禁用PhoneGap应用程序中的文本选择器

Disabling text selector in PhoneGap application?

本文关键字:文本 选择器 PhoneGap 应用程序 禁用      更新时间:2023-09-26

我在html文档中检测到长按(触摸事件)的单词。但在长按下,我得到原生文本选择器。我试图通过CSS禁用用户选择,但它会导致抛出一个错误。

html {
    -webkit-user-select: none;
}
错误:

Uncaught IndexSizeError: Index or size was negative, or greater than the allowed value.
代码:

    <body onload="init()">    
       <p id="book-content">
            One reason people ......at the time, since then it has made me look down on myself.
      </p>
      <script type="text/javascript">
            var self = this;
            var startTime, endTime;
            var gbMove = false;
            function init() {
                document.getElementById("book-content").addEventListener('touchstart', self.touchstart, false);
                document.getElementById("book-content").addEventListener('touchmove', self.touchmove, false);
                document.getElementById("book-content").addEventListener('touchend', self.touchend, false);
            }
            function touchstart(e) {
                startTime = new Date().getTime();
                gbMove = false;
                console.log('Received Event touchstart');
            }
            function touchmove(e) {
               // gbMove = true;
                console.log('Received Event touchmove');
            }
            function touchend(e) {
                endTime = new Date().getTime();
                if (!gbMove && (endTime - startTime) / 1000 > 1) {
                    s = window.getSelection();
                    var range = s.getRangeAt(0);
                    var node = s.anchorNode;
                    while (range.toString().indexOf(' ') != 0) {
                        range.setStart(node, (range.startOffset - 1));
                    }
                    range.setStart(node, range.startOffset + 1);
                    do {
                        range.setEnd(node, range.endOffset + 1);
                    } while (range.toString().indexOf(' ') == -1 && range.toString().trim() != '' && range.endOffset < node.length);
                    var str = range.toString().trim();
                    alert(str);
                }
            }
    </script>
    </body>

这个问题很容易预防。在调用getRangeAt:

之前总是检查rangeCount
function touchend(e) {
...
   if (s && s.rangeCount > 0) {
     var range = s.getRangeAt(0);
...
}

请参考-同样的问题在这里解决了这篇文章。点击这里http://jsfiddle.net/stXDu/