<img src="http://www.ne.jp/asahi/cyberpunk/freedom/article/img/marutabashi.jpg" height="480" width="640">
が、Firefox 31.0で表示されている時に、画像をドラッグ&ドロップした場合の、
eventオブジェクトの、ドラッグ&ドロップに関連するデータを保持している、
event.dataTransfer オブジェクトの中身を見ると、理解しやすいでしょう。
(A)の event.dataTransfer の、event.dataTransfer.files[0] で渡されるものは、一時ファイルに保存した、a67dbvs1.bmpというMime-Type=image/bmpのファイル。
(B)の event.dataTransfer.getData(”text/html”) や、event.dataTransfer.getData(”text/x-moz-url”) で得られるデータは、HTML内の、<img src-"...">のURL.
どれをどう使うかは、ドロップを処理するアプリケーションの自由です。
Windows Explorerは、(B)の event.dataTransfer.getData(”text/html”) などを使うみたいですね。
一方、Thunderbirdのコンポーザーは、以前は、(A)の event.dataTransfer.files[0] で渡される、BMPの一時ファイルを使っていました。
でも、Thunderbird 31.0にしたら、同じevent.dataTransferオブジェクトのはずなのに、ドラッグ&ドロップで、画像の添付やHTMLの画像の挿入ができなくなってしまっている...(^^;
Bugzilla.orgで見たような気がする、ドラッグ&ドロップで画像の挿入ができない、というのが、これかもしれません。
ドラッグのスタート時に、Firefoxがセットするevent.dataTransferオブジェクトの中身、
特に、event.dataTransfer.files[0].typeが、
一時ファイルの拡張子の.BMPに対応するimage/bmpにきちんとなっていないと、
Windows Explorerは、(B)の event.dataTransfer.getData(”text/html”) などを使わずに、
(A)の event.dataTransfer.files[0] で指定された一時ファイルのままで保存する、ということかもしれません。
FirefoxのmimeTypes.rdfに、拡張子=.BMP ⇔ Mime-Type=text/plainとかappkication/octe-stream、の関連付けができてしまうと、そういったことは起こり得ます。
コード:
(A) event.dataTransfer の中身。
Drop event at iD=, event.dataTransfer = {
[setDragImage] = function setDragImage()
[getData] = function getData()
[setData] = function setData()
[clearData] = function clearData()
[addElement] = function addElement()
[mozTypesAt] = function mozTypesAt()
[mozClearDataAt] = function mozClearDataAt()
[mozSetDataAt] = function mozSetDataAt()
[mozGetDataAt] = function mozGetDataAt()
[dropEffect] = move
[effectAllowed] = uninitialized
[types] = {
[0] = application/x-moz-file
[1] = text/html
[2] = text/x-moz-url
[3] = text/uri-list
[4] = text/x-moz-url-data
[5] = text/plain
[6] = Files
[item] = function item()
[contains] = function contains()
[@@iterator] = function @@iterator()
[length] = 7
}
[files] = {
[0] = {
[size] = 1228938
[type] = image/bmp
[slice] = function slice()
[name] = a67dbvs1.bmp
[path] =
[lastModifiedDate] = Thu Aug 21 2014 15:40:05 GMT+0900
[mozFullPath] = C:\DOCUME~1\wada\LOCALS~1\Temp\a67dbvs1.bmp
}
[item] = function item()
[@@iterator] = function @@iterator()
[length] = 1
}
[mozItemCount] = 1
[mozCursor] = auto
[mozUserCancelled] = false
[mozSourceNode] = null
}
コード:
(B) event.dataTransfer.getData(各種のデータタイプ) で得られるデータ。
event.dataTransfer.getData() for types = {
[application/x-moz-file] =
[text/html] = <img src="http://www.ne.jp/asahi/cyberpunk/freedom/article/img/marutabashi.jpg" height="480" width="640">
[text/x-moz-url] = http://www.ne.jp/asahi/cyberpunk/freedom/article/img/marutabashi.jpg
http://www.ne.jp/asahi/cyberpunk/freedom/article/img/marutabashi.jpg
[text/uri-list] = http://www.ne.jp/asahi/cyberpunk/freedom/article/img/marutabashi.jpg
[text/x-moz-url-data] = http://www.ne.jp/asahi/cyberpunk/freedom/article/img/marutabashi.jpg
[text/plain] = http://www.ne.jp/asahi/cyberpunk/freedom/article/img/marutabashi.jpg
[Files] =
}