getRangeAt() - 如果未选择任何文本,则会出错

时间:2010-07-09 11:22:50

标签: javascript dom

我使用这个简单的Javascript代码来检索在网页上选择的文字:

var userselection = window.getSelection(); //user selection will be a Selection-Object
var rangeObject = userselection.getRangeAt(0); 

如果选择了文本,代码可以正常工作。如果我只是单击可以选择的文本,我也会得到一个范围对象,它会按预期折叠。

但如果我不选择也不点击,Firefox会抛出此错误:

uncaught exception: [Exception... "Component returned failure code: 0x80070057
(NS_ERROR_ILLEGAL_VALUE)  [nsISelection.getRangeAt]" nsresult: "0x80070057 
(NS_ERROR_ILLEGAL_VALUE)" location: "JS frame :: file:///home/jan/Webprojekte/test-range
selection.html# :: who :: line 16" data: no]

是否有一种干净的方法可以防止错误,但仍然会通知用户没有选择任何文字?

2 个答案:

答案 0 :(得分:8)

是:首先检查选择的rangeCount属性。如果为零,请不要拨打getRangeAt()

答案 1 :(得分:2)

我遇到了同样的问题。但在我的情况下,我有rangeCount等于1.偶然我发现这种方式来解决问题

你需要设置超时功能然后一切顺利

setTimeout(function(){
    var userselection = window.getSelection(); //user selection will be a Selection-Object
    var rangeObject = userselection.getRangeAt(0);
},100)