↑「CmdUtils.getTextSelection」を実行すると表示されるエラー
やはり選択中の文字列が取り出せないとなると不便なので、少し回避策を考えてみました。そこで、command-editorで再定義!を思いつきました。
具体的には、command-editorにcmdutils.jsのCmdUtils.getTextSelectionのブロック(175〜189行目)をそのままコピーしてみたところ、正常に?動作するようになりました。(今のところ、既存のコマンドへの影響は特に無いと思っています。が、何か問題があるようでしたら削除すればOKです)
もし同じ症状が発生している方がいたら、以下のコードをcommand-editorの一番上辺りに貼り付けてみると良いかもしれません。
−−ここから--
CmdUtils.getTextSelection = function getTextSelection() {
var focused = context.focusedElement;
var retval = "";
if (focused)
if (focused.selectionStart != focused.selectionEnd)
retval = focused.value.substring(focused.selectionStart,
focused.selectionEnd);
if (!retval) {
var sel = context.focusedWindow.getSelection();
if (sel.rangeCount >= 1)
retval = sel.toString();
}
return retval;
};
--ここまで--私の環境では、この方法で選択中の文字列が取得できるようになりました。という訳で、選択中の文字列の文字数を数えるコマンドを定義してみました。これは「word-count」コマンドでは日本語を扱えないので、とりあえずlengthの値を返すようにしてみただけです。「それ、○○でできるよ!」というのは無しでお願いしますw
以下のコードをcommand-editorの一番下にでも貼り付ければOKです。
--ここから--
CmdUtils.CreateCommand({
name: "length",
description: "選択中の文字列の文字数を表示します。空白や改行などは無視します。",
_length: function() {
var str = CmdUtils.getTextSelection();
str = str.replace(/\s|\n|\r/g, "");
return str.length;
},
preview: function(pblock) {
pblock.innerHTML = this._length() + "文字です。";
},
execute: function() {
displayMessage(this._length() + "文字でした。");
}
});
--ここまで--このコマンドを使って、先程書いたエントリの文字数を測ってみました。うーむ、想像以上に短かった!
↑文字数をカウントするコマンド「length」←好きな名前を付けて下さいw
以上、私の環境では、「CmdUtils.getTextSelection」で少しハマッたのでメモを残しておこうと思います。
(追記:8/30)わざわざ再定義しなくても、次のようなコードでも選択中の文字列を取得できますね!
var document = context.focusedWindow.document;
var str = document.getSelection();
3 件のコメント:
解決なされてるかもしれませんが、
getTextSelection()
↓
getHtmlSelection()
と名前が変わったようです。
この他にも
snapshotImage()
↓
getImageSnapshot()
のようにいくつか名前が変更されてるのがあるみたいですね。
匿名さん、こんにちは。コメントありがとうございます。
このエントリを書いたのは、ver0.1時代です。お恥ずかしながら、ver 0.1.1に関してはそれほど追っかけていませんでした...。今改めてチェックしてみると、ご指摘の通り、getTextSelection()は無くなっているようですね^^;
ver0.1.1で、選択中の文字列を取得するには、getHtmlSelection()を利用する。この時、HTMLタグを含めたくない場合は、getTextFromHtml()を組み合わせれば良さそうですね!(←文字数を数えるコマンドでは期待通りの結果を返しました!)
まだ追い切れていないのですが、少しずつキャッチアップしていきたいと思います。情報ありがとうございました!
単純にテキストを取得するだけなら、「CmdUtils.getSelection()」でOKでした。うーん、まだまだ勉強が足りないようです...。
コメントを投稿