この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、 断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。 Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではないことに注意してください。

現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。 順次、修正していく予定ですのでしばらくお待ちください。

もずはっく日記(2011年11月)

2011年11月27日

Bug-org 674770 contenteditable breaks middle-click to open links when middlemouse.paste=true
初回投稿日時: 2011年11月27日10時06分24秒
最終更新日時: 2011年11月27日10時20分00秒
カテゴリ: Mozilla Core Mozilla11 バグ修正
SNS: (list)

中クリックでの貼り付けが有効になっていると、contenteditableな要素のあるドキュメント内では編集不能なa要素であっても、中クリックでリンク先を開けないというバグです。

HTMLエディタのインスタンスはドキュメントごとにひとつしかなく、ドキュメントにイベントリスナを登録して全てのHTMLエディタの処理を行っています。例えば、

<body>
<p id="p1" contenteditable="true">Here is an editable paragraph.</p>
<p id="p2" contenteditable="true">Here is another editable pragraph.</p>
</body>

この例では、#p1にフォーカスが移動した場合は、DOM selectionのrange (つまり、キャレットや選択範囲)をその中に移し、入力イベントはそのrangeに対して実行します。#p2にフォーカスが移動すると、やはりrangeを#p2内に移動して同様に処理しています。

ですので、以前、キーイベントやIMEイベントで修正した様に、HTMLエディタは、処理内容によっては編集可能な要素がターゲットとなったイベントかどうかを確認しなくてはいけません。中クリックでの貼り付け、というのはもちろん、編集可能な要素がターゲットになっている場合にのみ実行しなくてはいけませんので、そのように修正しました。

ちなみに、

<html>
  <head></head>
  <body contenteditable="true"></body>
</html>

このように、ルート要素は編集可能ではないものの、body要素が編集可能な場合に、ルート要素をターゲットにしたマウスイベントが来た場合、上記の判定を行う前にターゲットをbody要素だと読み替えて処理を行います。ですので、body要素の高さを確保しなくてはマウスでキャレットを移したり、中クリックでの貼り付けができない、ということはありません。

関連するかもしれないエントリ

bug-org 674770を含むエントリ