2

RichTextArea のカーソル位置にテキストを挿入するために、GWT でこのネイティブ JavaScript メソッドを使用しています。時々機能しますが、「refNode.insertData は関数ではありません。カーソルが空白行にあるときはいつでも発生するようです。

public native void insertText(String text, int pos) /*-{
    var elem = this.@com.google.gwt.user.client.ui.UIObject::getElement()();
    var refNode = elem.contentWindow.getSelection().getRangeAt(0).endContainer;
    refNode.insertData(pos, text);
}-*/;

したがって、この JavaScript をデバッグする必要があり、どこから始めればよいかわかりません。私はjavascriptについてほとんど知りません.スタックの質問から私が使用しているこの方法しか知りません. この質問からコピーした別のネイティブ メソッドからカーソル位置を取得しています。

このエラーは、refNode が正しいタイプのオブジェクトではないためだと読みました。誰かがそれが実際にどのタイプのオブジェクトであるかを知っていて、この状況を処理するのを手伝ってくれると思いました.

4

2 に答える 2

2

問題は refNode が正しいタイプではないことだと思います。考えられる解決策の 1 つは、refNode のタイプを確認し、タイプが TEXT_NODE でない場合は、テキスト ノードを作成して refData に追加することです。コードは次のようになります。

public native void insertText(String text, int pos) /*-{
    var elem = this.@com.google.gwt.user.client.ui.UIObject::getElement()();
    var refNode = elem.contentWindow.getSelection().getRangeAt(0).endContainer;
    if(refNode.nodeType == 3){
        var newTxtNode = document.createTextNode(text);
        refNode.appendChild(newTxtNode);
    } else {
        refNode.insertData(pos, text);
    }
}-*/;

nodeType はここにあります。

于 2013-06-15T02:15:08.937 に答える