2005年11月05日
前回の「Safari的blogの書式」 にこちらからトラックバックを頂いた。firefox では動くそうである。で、なんで Safari で動かないか、もう少し調べてみた。
と、その前に、この手の内容ならコメント付けられるようにした方が良かったな。なんかコメント付くと、いちいち対応してしまいそうになるんで、面倒くさくてw
同じトラックバックが3つも付いちゃってるのはご愛敬。きっとブラウザを取っ替え引っ替えテストされたのでしょう。一応削除しておいたけど、大丈夫かな?ちなみにマカー歴10年とか、こちらは…、、と、やめておこう年が(ry
ざっと眺めてみる。このスクリプトは編集中の文章の選択範囲を取得してそこに書式制御用の記号を差し込むというもので、実際に記事が投稿されて、そこで初めて記号が HTML に変換される。ベースはWiki系のものなんかな?
で、この後半部分は問題無い。変換はサーバー側で行われるわけで、正しい記号を含んだテキストがフォームとして送信されていれば、それで意図どおりのページができあがるわけである。
そして問題は前半部分にあるわけだが、これは記号入力を簡単に間違えなく使えるようにする「便利機能」にすぎないわけで、正しく理解していれば、Safari だろうと、なんだろうと手入力で問題ない。
* * *
このへん、ユーザーが編集している最中のテキストに、見知らぬ記号を差し込むのに、その記号自体についてマニュアルに十分と思える記述がないのは問題だろうな。
ユーザーが良く理解しないで初めて見た記号を編集してしまう可能性もあるわけだし、偶然、書式記号と同じものを文章として入力しようとして、意図しないページができあがって悩んでしまう人もいるかもしれない。そして、もちろん説明が十分にあれば、(人によっては)こんなふうに調べ回らなくても問題なく使えただろうに…と。
* * *
と、話が脇道にそれてしまったが、結局、問題はブラウザの JavaScript非互換問題ということになる。最初の「編集中の文章の選択範囲を取得」が Safari でうまく出来ないことが問題。
この部分、スクリプトでは、
document.selection.createRange()
と、
txtarea["setSelectionRange"]
の二通りの対応で互換性に配慮している。が、Safari ではどちらもうまくいかない。Safari で選択範囲を取得するには、
window.getSelection()
を使う…のだが、今回に限ってはたぶんこれもうまくいかない。
今回のスクリプトは onClick event をトリガーとして処理を行っているのだが、その、クリックしたアンカーの文字列を含んだような選択範囲なら正しい文字列が得られることを確認した。だが、それ以外が選択範囲の場合は、どーしても空の文字列が帰されてしまう。
そして、実際に必要なのはアンカーどころか、本文とは別のフォーム中のテキストエリアという領域の選択情報なわけだから、これではどうしようもない。
つまり、今の時点での理解では、Safari では、今回のようなスクリプトベースの文字列差し込みは困難という結論なってしまう。
ただ、まだ調べている途中で、これが結論とは言い切れない。ベースになっている Gecko のリファレンス をたぐりつつ、いまひとつ動作に不可解な部分もある。バージョン依存、環境依存といった可能性も考えなきゃいけない。時間があれば、もう少し調べてみたいところだが…。
ところで明日のチケットはすでに人の手に渡っている。そうだよ、仕事だよ、、、ぐぅ…。みんな、応援よろしく…
プロフィール
こどれ
最新のエントリー
検索