0

我正在运行这段代码,用于在用户选择 iframe 之外的另一个单词时取消选择用户在 iframe 中选择的单词:

function getCurrentWord() {
    var range;
    var w = "";

    if (document.selection) {
        ////IE
        range = document.selection.createRange();
        w = trim(range.text);
    } else {
        ////NOTIE
        w = trim(window.getSelection().toString());
    }

    if (w != "" && document.getElementById("frmBook")) {
        var oTextRange;
        if (document.selection) {
            ////IE
            oTextRange = document.getElementById("frmBook").contentWindow.document.selection.createRange();
            oTextRange.expand("word");
            oTextRange.execCommand("unselect") ;
        } else {
            ////NOTIE       
            oTextRange = document.getElementById("frmBook").contentWindow.getSelection();
            oTextRange.collapseToStart();
        }
    }

    if (w == "" && document.getElementById("frmBook")) {
        if (document.selection) {
            ////IE
            range = document.getElementById("frmBook").contentWindow.document.selection.createRange();
            w = trim(range.text);
        } else {
            ////NOTIE
            w = trim(document.getElementById("frmBook").contentWindow.getSelection().toString());
            /*
            IF I PUT IT HERE IT DOESN'T SHOW AN ERROR
            oTextRange = document.getElementById("frmBook").contentWindow.getSelection();
            oTextRange.collapseToStart();
            */
        }
    }
    return w;
}

问题是我在 Firefox 错误控制台上收到此错误:

时间戳:2012 年 9 月 5 日 12:20:42 μμ 错误:未捕获的异常:[异常...“尝试使用不可用或不再可用的对象”代码:“11”nsresult: “0x8053000b (NS_ERROR_DOM_INVALID_STATE_ERR)”位置:“ http://192.168.0.88/test.js行:295”]

当代码位于

oTextRange.collapseToStart();

线。

我试图像这样在一行中运行它:

document.getElementById("frmBook").contentWindow.getSelection().collapseToStart();

但我得到同样的错误

frmBook 是 iframe 的 ID

如果我运行那段导致我已将其注释掉的错误的代码,它不会显示错误,这很奇怪!

有人知道我在做什么错吗?提前致谢

4

1 回答 1

2

查看http://dxr.lanedo.com/mozilla-central/layout/generic/nsSelection.cpp.html上的源代码(可能是旧版本)collapseToStart,如果实际上什么都没有,似乎会产生该错误选择。您可以检查是否oTextRange.rangeCount< 1,如果是,则根本不进行折叠。(如果出于某种原因这应该是不可能的,那么您可能会遇到不同的问题。)

于 2012-05-09T09:40:31.250 回答