2012-05-09 11 views
0

私は彼がiframeの外に別の単語を選択した場合、単語iframe内に選択したユーザを選択解除するために、コードのこの部分を実行しています:javascriptのcollapseToStart()エラー

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; 
} 

を問題は私が手であります

タイムスタンプ:2012/09/05 12:20:42μμ エラー:キャッチされていない例外:[例外... "存在しないか、または存在しないオブジェクトを使用しようとしましたもはや使用可能な "コード:" 11 "nsresult:" 0x8053000b(NS_ERROR_DOM_INVALID_STATE_ERR) "場所:" http://192.168.0.88/test.js Line:295 "

そのエラーコードが

oTextRange.collapseToStart(); 

ラインであるときに生じます。

は、私はこのような単一の行でそれを実行しようとした:

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

しかし、私はのその部分を実行する場合

frmBookはインラインフレーム

のIDで同じエラーが出ます私はそれをコメントアウトしたエラーを引き起こすコード、それはエラーを表示しない、それは変だ!

私は何が間違っているのですか? 事前に感謝します

答えて

2

http://dxr.lanedo.com/mozilla-central/layout/generic/nsSelection.cpp.htmlでソースコードの(おそらく古いバージョンかもしれません)を見て、それは実際に何も選択されていない場合、そのエラーを生成するようです。 oTextRange.rangeCountが<であるかどうかを確認することができます。 (なぜそれが不可能なのか何らかの理由がある場合は、おそらく別の問題があります。)

+0

これは問題でした、ありがとう! – MIrrorMirror