ãã©ãã°ãã¼ã¿ã¹ãã¢ã§ã®ä½æ¥
DragEvent ã¤ã³ã¿ã¼ãã§ã¤ã¹ã«ã¯ dataTransfer ããããã£ãããããã㯠DataTransfer ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ãªãã¸ã§ã¯ãã§ããDataTransfer ãªãã¸ã§ã¯ãã¯ãã©ãã°æä½ã®ã¡ã¤ã³ã³ã³ãã³ãã表ããæ§ã
ãªã¤ãã³ãã®çºçã«ã¾ããã£ã¦ä¸è²«ãã¦åå¨ãã¾ããããã¯ãã©ãã°ãã¼ã¿ããã©ãã°ç»åããããã广ããªã©ãããã¾ãããã®è¨äºã¯ããã©ãã°ãã¼ã¿ã¹ãã¢ã®ä½¿ç¨æ¹æ³ã«ç¦ç¹ãå½ã¦ã¦ãã¾ãã
ãã©ãã°ãã¼ã¿ã¹ãã¢ã®æ§é
åºæ¬çã«ããã©ãã°ãã¼ã¿ã¹ãã¢ã¯ã¢ã¤ãã ã®ãªã¹ãã§ãããDataTransferItem
ãªãã¸ã§ã¯ãã® DataTransferItemList ã¨ãã¦è¡¨ãã¾ããããããã®ã¢ã¤ãã 㯠2 ç¨®é¡ ã®ã©ã¡ããã§ãã
string- æ¬ä½ã¯æååã§ãããgetAsString()ã§åå¾ã§ãã¾ããfile- æ¬ä½ã¯ãã¡ã¤ã«ã§ãããgetAsFile()ï¼ã¾ãã¯getAsFileSystemHandle()ãã¾ãã¯ãã£ã¨è¤éãªãã¡ã¤ã«ã·ã¹ãã ãå¿ è¦ã§ããã°webkitGetAsEntry()ï¼ã§åå¾ã§ãã¾ãã
ããã«ãã¢ã¤ãã ã¯åã«ãã£ã¦ãèå¥ããã¾ããããã¯æ
£ä¾ã«ãã MIME ã¿ã¤ãã®å½¢å¼ãåãã¾ãããã®åã¯ãåã®è§£ææ¹æ³ããã³ã¼ãæ¹æ³ãå©ç¨å´ã«æç¤ºãããã¨ãã§ãã¾ãããã¹ã¦ã®ããã¹ãã¢ã¤ãã ã«ããã¦ããªã¹ãã«ã¯ããããã®åã«ã¤ãã¢ã¤ãã ã 1 ã¤ããç½®ããã¨ãã§ãã¾ããããããã£ã¦ããªã¹ãã¯å®è³ªçã« 2 ã¤ã®äºãã«æä»ç (disjoint) ãªéåãå«ã¿ã¾ããéè¤ããåãæã¤å¯è½æ§ã®ãããã¡ã¤ã«ã®ãªã¹ãã¨ãåããã¼ã¨ããããã¹ãã¢ã¤ãã ã® Map ã§ããä¸è¬çã«ããã¡ã¤ã«ãªã¹ãã¯è¤æ°ã®ãã¡ã¤ã«ããã©ãã°ããã¦ãããã¨ã表ãã¾ããããã¹ããããã¯è¤æ°ã®è»¢éãªã½ã¼ã¹ã表ããã®ã§ã¯ãªããåä¸ãªã½ã¼ã¹ã®ç°ãªãå½¢å¼ã¨ã³ã³ã¼ãã£ã³ã°ã表ãã¾ããããã«ããåä¿¡å´ã¯ãµãã¼ãããæé©ãªè§£éã鏿ã§ãã¾ããããã¹ãé
ç®ã¯åªå
度éé ã§ã½ã¼ãããããã¨ãæå³ãã¦ãã¾ãã
ãã®ãªã¹ã㯠DataTransfer.items ããããã£ããã¢ã¯ã»ã¹å¯è½ã§ãã
HTML ãã©ãã°ï¼ãããã API ã¯è¤æ°ã®æ¹è¨ãçµã¦ããã¼ã¿ã¹ãã¢ã管çãã 2 ã¤ã®æ¹æ³ãå
±åããçµæã¨ãªãã¾ãããDataTransferItemList ããã³ DataTransferItem ã¤ã³ã¿ã¼ãã§ã¤ã¹ãå°å
¥ãããåã®ãæ§æ¹å¼ãã§ã¯ãDataTransfer ä¸ã§ä»¥ä¸ã®ããããã£ã使ç¨ããã¦ãã¾ããã
types: ãªã¹ãå ã®ããã¹ãã¢ã¤ãã ã®typeããããã£ã«å ãããã¡ã¤ã«é ç®ãåå¨ããå ´åãå¤"files"ãå«ã¿ã¾ããsetData(),getData(),clearData(): ãªã¹ãå ã®ããã¹ãã¢ã¤ãã ã¸ã®ã¢ã¯ã»ã¹ã "type-to-payload mapping" ã¢ãã«ãç¨ãã¦æä¾ãã¾ããfiles: ãªã¹ãå ã®ãã¡ã¤ã«é ç®ã¸ã®ã¢ã¯ã»ã¹ããFileListã¨ãã¦æä¾ãã¾ãã
ãã¡ã¤ã«é
ç®ã®åãç´æ¥å
¬éããã¦ããªããã¨ã«æ°ã¥ãããããã¾ããããããã¯ã¢ã¯ã»ã¹ã¯å¯è½ã§ãããfiles ãªã¹ãå
ã®å File ãªãã¸ã§ã¯ãã® type ããããã£çµç±ã§ã®ã¿ã¢ã¯ã»ã¹ã§ãã¾ãããããã£ã¦ããã¡ã¤ã«ãèªã¿åããªãå ´åããã®åãç¥ããã¨ãã§ãã¾ããï¼ã¹ãã¢ãèªã¿åãå¯è½ã«ãªãã¿ã¤ãã³ã°ã«ã¤ãã¦ã¯ãã©ãã°ãã¼ã¿ã¹ãã¢ã®èªã¿åããåç
§ãã¦ãã ããï¼ã
ãã¡ã¤ã«ã¨ãã®åãåå¾ããã«ã¯ã items ããããã£ã®ä½¿ç¨ããå§ããã¾ããããã¯ããæè»ã§ä¸è²«æ§ã®ããã¤ã³ã¿ã¼ãã§ã¤ã¹ãæä¾ããããã§ããããã¹ãã¢ã¤ãã ã«ã¤ãã¦ããä¸è²«æ§ãä¿ã¤ããã« items ããããã£ã®ä½¿ç¨ãæ¨å¥¨ãã¾ãããã ããç¹å®ã®åã¸ã®ã¢ã¯ã»ã¹ãåé¤ã«ã¯ getData() ã¡ã½ããã®æ¹ã便å©ã§ãã
DataTransfer 㨠DataTransferItem ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ããä¸ã¤ã®éè¦ãªéãã¯ãåè
ãããã¹ããã¤ãã¼ãã¸ã®ã¢ã¯ã»ã¹ã«åæç㪠getData() ã¡ã½ããã使ç¨ããã®ã«å¯¾ããå¾è
ã¯éåæç㪠getAsString() ã¡ã½ããã使ç¨ããç¹ã§ãã
ãã©ãã°ãã¼ã¿ã¹ãã¢ã®å¤æ´
ç»åããªã³ã¯ã鏿ç¯å²ãªã©ã®ããã©ã«ãã§ãã©ãã°å¯è½ãªã¢ã¤ãã ã«ã¤ãã¦ã¯ããã©ãã°ãã¼ã¿ã¯ãã©ã¦ã¶ã¼ã«ãã£ã¦æ¢ã«å®ç¾©ããã¦ãã¾ããdraggable 屿§ã使ç¨ãã¦å®ç¾©ãããã«ã¹ã¿ã ãã©ãã°å¯è½è¦ç´ ã«ã¤ãã¦ã¯ããã©ãã°ãã¼ã¿ãèªèº«ã§å®ç¾©ããå¿
è¦ãããã¾ãããã¼ã¿ã¹ãã¢ã«å¤æ´ãå ãããã¨ãã§ããã®ã¯ãdragstart ãã³ãã©ã¼å
ã®ã¿ã§ãããã®ä»ã®ãã©ãã°ã¤ãã³ãã® dataTransfer ã«ã¤ãã¦ã¯ããã¼ã¿ã¹ãã¢ã¯å¤æ´ä¸å¯è½ã§ãã
ããã¹ããã¼ã¿ããã©ãã°ãã¼ã¿ã¹ãã¢ã«è¿½å ããããã«ããæ°ããæ¹æ³ãã§ã¯ DataTransferItemList.add() ã¡ã½ããã使ç¨ããã®ã«å¯¾ãããå¤ãæ¹æ³ãã§ã¯ DataTransfer.setData() ã¡ã½ããã使ç¨ãã¾ãã
function dragstartHandler(ev) {
// æ°ããæ¹æ³: add(data, type)
ev.dataTransfer.items.add(ev.target.innerText, "text/plain");
// å¤ãæ¹æ³: setData(type, data)
ev.dataTransfer.setData("text/html", ev.target.outerHTML);
}
const p1 = document.getElementById("p1");
p1.addEventListener("dragstart", dragstartHandler);
ã©ã¡ãã®æ¹æ³ãããã¼ã¿ã¹ãã¢ã夿´ä¸å¯ç¶æ
ã®ã¨ãã«å¼ã³åºãããå ´åãä½ãèµ·ããã¾ãããåãåã®ããã¹ãã¢ã¤ãã ãæ¢ã«åå¨ããå ´åãadd() ã¯ã¨ã©ã¼ãçºçããã¾ãããsetData() ã¯æ¢åã®ã¢ã¤ãã ã䏿¸ããã¾ãã
ãã¡ã¤ã«ãã¼ã¿ããã©ãã°ãã¼ã¿ã¹ãã¢ã«è¿½å ããã«ã¯ããæ°ããæ¹æ³ãã§ã¯ãã¯ã DataTransferItemList.add() ã¡ã½ããã使ç¨ãã¾ãããå¤ãæ¹æ³ãã§ã¯ãã¡ã¤ã«é
ç®ã¯ DataTransfer.files ããããã£ï¼èªã¿åãå°ç¨ã® FileListï¼ã«ä¿åããããããç´æ¥å¯¾å¿ããæ¹æ³ã¯åå¨ãã¾ããã
function dragstartHandler(ev) {
// æ°ããæ¹æ³: add(data)
ev.dataTransfer.items.add(new File([blob], "image.png"));
}
const p1 = document.getElementById("p1");
p1.addEventListener("dragstart", dragstartHandler);
ãã¡ã¤ã«ãã¼ã¿ã追å ããéãadd() 㯠type 弿°ãç¡è¦ããFile ãªãã¸ã§ã¯ãã® type ããããã£ã使ç¨ãããã¨ã«æ³¨æãã¦ãã ããã
ã¡ã¢:
èªã¿åã/æ¸ãè¾¼ã¿ä¿è·ã¯ã¸ã§ãåä½ã§è¡ããã¾ããã¤ã¾ããdragstart ãã³ãã©ã¼å
ã®åæã³ã¼ãã®ã¿ããã¼ã¿ã¹ãã¢ã夿´ã§ãã¾ããéåææä½å¾ã«ãã¼ã¿ã¹ãã¢ã«ã¢ã¯ã»ã¹ãããã¨ããã¨ãæ¸ãè¾¼ã¿æ¨©éã¯å¤±ããã¾ããä¾ãã°ã次ã®ãã®ã¯æ©è½ãã¾ããã
function dragstartHandler(ev) {
canvas.toBlob((blob) => {
ev.dataTransfer.items.add(new File([blob], "image.png"));
});
}
DataTransferItemList.remove(), DataTransferItemList.clear(), DataTransfer.clearData() ã®åã¡ã½ããã使ç¨ãã¦ãã¼ã¿ãåé¤ããå ´åãåæ§ã§ãã
ãã©ãã°ãã¼ã¿ã¹ãã¢ã®èªã¿åã
ãã¼ã¿ã¹ãã¢ããèªã¿åãã§ããã¿ã¤ãã³ã°ã¯ããã¼ã¿ã¹ãã¢ã¸ã®å®å
¨ãªã¢ã¯ã»ã¹æ¨©ãæã¤ dragstart ã¤ãã³ãæã¨ãdrop ã¤ãã³ãæã«éããã¾ããããã«ããããããå
ããã¼ã¿ãåå¾ã§ãã¾ãã
ãã©ãã°ãã¼ã¿ã¹ãã¢ããããã¹ããã¼ã¿ãèªã¿åãã«ã¯ããæ°ããæ¹æ³ãã§ã¯ DataTransferItemList ãªãã¸ã§ã¯ãã使ç¨ãããå¤ãæ¹æ³ãã§ã¯ DataTransfer.getData() ã¡ã½ããã使ç¨ãã¾ããæ°ããæ¹æ³ã¯ãã¹ã¦ã®ã¢ã¤ãã ãã«ã¼ãå¦çããã®ã«ä¾¿å©ã§ãããå¤ãæ¹æ³ã¯ç¹å®ã®åã«ã¢ã¯ã»ã¹ããã®ã«ä¾¿å©ã§ãã
function dropHandler(ev) {
// æ°ããæ¹æ³: ã¢ã¤ãã 群ãã«ã¼ãå¦ç
for (const item of ev.dataTransfer.items) {
if (item.kind === "string") {
item.getAsString((data) => {
// ãã¼ã¿ã§ä½ãããã
});
}
}
// å¤ãæ¹æ³: getData(type)
const data = ev.dataTransfer.getData("text/plain");
}
const p1 = document.getElementById("p1");
p1.addEventListener("drop", dropHandler);
ãã©ãã°ãã¼ã¿ã¹ãã¢ãããã¡ã¤ã«ãã¼ã¿ãèªã¿åãå ´åããæ°ããæ¹æ³ãã§ã¯ä¾ç¶ã¨ã㦠DataTransferItemList ãªãã¸ã§ã¯ãã使ç¨ãã¾ããããå¤ãæ¹æ³ãã§ã¯ DataTransfer.files ããããã£ã使ç¨ãã¾ãã
function dropHandler(ev) {
// æ°ããæ¹æ³: ã¢ã¤ãã 群ãã«ã¼ãå¦ç
for (const item of ev.dataTransfer.items) {
if (item.kind === "file") {
const file = item.getAsFile(); // File ãªãã¸ã§ã¯ã
}
}
// å¤ãæ¹æ³: ãã¡ã¤ã«ãã«ã¼ãå¦ç
for (const file of ev.dataTransfer.files) {
// ãã¡ã¤ã«ã§ä½ãããã
}
}
const p1 = document.getElementById("p1");
p1.addEventListener("drop", dropHandler);
ä¿è·ã¢ã¼ã
dragstart ããã³ drop ã¤ãã³ã以å¤ã§ã¯ããã¼ã¿ã¹ãã¢ã¯ãä¿è·ã¢ã¼ããã¨ãªããã³ã¼ãããã¼ã¿æ¬ä½ã«ã¢ã¯ã»ã¹ãããã¨ã許å¯ãã¾ãããå
·ä½çã«ã¯ã
- 夿´ã試ã¿ãã¨ãã¹ã¦ãéãã«ä½ãããªããã
DOMExceptionãçºçããããã§ãï¼items.add()ããã³items.remove()ã®ã¿ï¼ã DataTransfer.getData()ã¯å¸¸ã«ç©ºæååãè¿ãã¾ããDataTransfer.filesã¯å¸¸ã«ç©ºã®ãªã¹ããè¿ãã¾ããDataTransferItem.getAsString()ã¯ã³ã¼ã«ããã¯ãå¼ã³åºããã¨ãªãæ»ãã¾ããDataTransferItem.getAsFile()ã¯å¸¸ã«nullãè¿ãã¾ãã
ç¹°ãè¿ãã¾ãããèªã¿åã/æ¸ãè¾¼ã¿ä¿è·ã¯ã¸ã§ãåä½ã§å®æ½ããã¾ããã¤ã¾ããdrop ãã³ãã©ã¼å
ã®åæã³ã¼ãã®ã¿ããã¼ã¿ã¹ãã¢ãèªã¿åãã¾ããéåææä½å¾ã«ãã¼ã¿ã¹ãã¢ã«ã¢ã¯ã»ã¹ãããã¨ããã¨ãæ¸ãè¾¼ã¿æ¨©éã¯å¤±ããã¾ããä¾ãã°ã以ä¸ã¯åä½ãã¾ããã
function getDataPromise(item) {
return new Promise((resolve) => {
item.getAsString((data) => {
resolve(data);
});
});
}
async function dropHandler(ev) {
for (const item of ev.dataTransfer.items) {
if (item.kind === "string") {
// æªãä¾ï¼ããã 2 åç®ã«å®è¡ãããã¨ãåãã¸ã§ãã«ã¯ãªããªã
const data = await getDataPromise(item);
}
}
}
const p1 = document.getElementById("p1");
p1.addEventListener("drop", dropHandler);
代ããã«ããã¹ã¦ã®ã¢ã¯ã»ã¹ã¡ã½ãããäºåã«åæçã«å¼ã³åºããçµæãå¾ã§å¾ æ©ããå¿ è¦ãããã¾ãã
async function dropHandler(ev) {
const promises = [];
for (const item of ev.dataTransfer.items) {
if (item.kind === "string") {
// æªãä¾ï¼ããã 2 åç®ã«å®è¡ãããã¨ãåãã¸ã§ãã«ã¯ãªããªã
promises.push(getDataPromise(item));
}
}
const results = await Promise.all(promises);
}
ä¸è¬çãªãã©ãã°ãã¼ã¿å
仿§æ¸ã§ã¯ä¸é¨ã®ãã¼ã¿åã«å¯¾ããåä½ã®ã¿ãå®ç¾©ãã¦ãã¾ããããã©ã¦ã¶ã¼ã«ãã£ã¦ã¯ããå¤ãã®åã«ãã¤ãã£ãã§å¯¾å¿ãã¦ããå ´åãããã¾ããä¸è¬çã«ãå㯠MIME ã¿ã¤ãã¨åæ§ã®ãããã³ã«ã¨ãã¦æå³ããã¦ãããåä¿¡å´ï¼å¥ã®ã¦ã§ããã¼ã¸ãåä¸ã¦ã§ããã¼ã¸å ã®å¥ã®é¨åããããã¯ãã©ã¦ã¶ã¼å¤ã®å ´æï¼ãçè§£ã§ããéããä»»æã®åã使ç¨ã§ãã¾ãããã®ç¯ã§ã¯ãä¸è¬çãªæ £ç¿ã¨ãã©ã¦ã¶ã¼ã®ããã©ã«ãåä½ã«ã¤ãã¦èª¬æãã¾ãã
以ä¸ã®ã·ããªãªã¯ãæå³ããæãããåä½ããæããã®ã§ã¯ãªããã¨ã«æ³¨æãã¦ãã ãããä¾ãã°ããªã³ã¯ããã©ãã°ãããã¨è¨ãå ´åãã¦ã¼ã¶ã¼ãå®éã« <a> è¦ç´ ããã©ãã°ãã¦ããã¨ã¯éãã¾ããã1 ã¤ä»¥ä¸ã®ãªã³ã¯ãå«ãã³ã³ããããã©ãã°ãã¦ããå¯è½æ§ãããã¾ããããã®æå³ã¯ãªã³ã¯ããã¼ã¿ã¨ãã¦è»¢éãããã¨ã§ãããããã£ã¦ãã¦ã¼ã¶ã¼ãå®éã®ãªã³ã¯ããã©ãã°ãã¦ããå ´åã¨åæ§ã«ãæºåãããã¼ã¿ã¹ãã¢ãè¨å®ã§ãã¾ãã
ããã¹ãã®ãã©ãã°
ããã¹ãããã©ãã°ããã«ã¯ãtext/plain ã¿ã¤ãã使ç¨ãããã©ãã°ãããæååãå¤ã¨ãã¦æå®ãã¾ãã
event.dataTransfer.items.add("ããããã©ãã°ããããã¹ãã§ã", "text/plain");
è«ççãªããã¹ã代æ¿ãåå¨ããªãå ´åãé¤ããä»ã®åã«é対å¿ã®ã¢ããªã±ã¼ã·ã§ã³ãããããå
ã«å¯¾ãã¦ã¯ã常㫠text/plain åã®ãã¼ã¿ãäºåã¨ãã¦è¿½å ãã¹ãã§ãããã® text/plain åã¯æãç¹ç°æ§ãä½ãããåªå
ãããã¹ãã§ã¯ãªããããå¸¸ã«æå¾ã«è¿½å ãã¦ãã ããã
getData()ãsetData()ãclearData() ã§ã¯ãText åï¼å¤§æåå°æåãåºå¥ããªãï¼ã¯ text/plain ã¨ãã¦æ±ããã¾ãã
ããã©ã«ãã§ã¯ã鏿ç¯å²ããã©ãã°ããã¨ã以ä¸ã®ãã¼ã¿é ç®ã使ããã¾ãã
text/plain: 鏿ãããããã¹ããå«ããFirefox 㨠Safari ã¯ãã®ã¢ã¤ãã ãtext/htmlã®å¾ã«é ç½®ãããã仿§ã§ã¯æåã«é ç½®ãããã¨ãè¦æ±ããã¦ãããtext/html: 鏿ãããè¦ç´ ã®å®å ¨ãª HTML ã½ã¼ã¹ï¼ãã¹ã¦ã®ã¹ã¿ã¤ã«ãã¤ã³ã©ã¤ã³åãããç¶æ ï¼ãå«ãã
仿§æ¸ã§ã¯ãapplication/microdata+json åã®å¥ã®ã¢ã¤ãã ã¨ãã¦ããã©ãã°é¸æãããè¦ç´ ããæ½åºããããã¤ã¯ããã¼ã¿ãå«ãããã¨ãè¦æ±ãã¦ãã¾ãããã®ã¢ã¤ãã ãå®è£
ãã¦ãããã©ã¦ã¶ã¼ã¯ããã¾ããã
ç·¨éå¯è½ãªããã¹ããã£ã¼ã«ãï¼ä¾ï¼ <textarea> ã <input type="text">ï¼ã«ããããããå ´åãtext/plain ã¢ã¤ãã ã¯ããã©ã«ãã§ãã£ã¼ã«ãã«ã³ãã¼ããã¾ãï¼ã¤ãã³ãå¦çãªãï¼ã
ãªã³ã¯ã®ãã©ãã°
ãã©ãã°ããããã¤ãã¼ãªã³ã¯ã«ã¯ãtext/uri-list 㨠text/plain ã® 2 ç¨®é¡ ã®ãã¼ã¿ãå«ããå¿
è¦ãããã¾ããã©ã¡ãã®å½¢å¼ããªã³ã¯ã® URL ããã¼ã¿ã«ä½¿ç¨ããªããã°ãªãã¾ããããªããURL ç¨ã®å㯠uri-list ã§ãããL ã§ã¯ãªã I ã§ãããã¨ã«æ³¨æãã¦ãã ããã
é常ãtext/plain åã text/uri-list åã®ãã©ã¼ã«ããã¯ã¨ãã¦æå¾ã«è¨å®ãã¾ãã
event.dataTransfer.items.add("https://www.mozilla.org", "text/uri-list");
event.dataTransfer.items.add("https://www.mozilla.org", "text/plain");
è¤æ°ã®ãªã³ã¯ããã©ãã°ããã«ã¯ãããããã®ãªã³ã¯ã text/uri-list ãã¼ã¿å
ã§ CRLF æ¹è¡ã§åºåã£ã¦ãã ããããã³ãã¼è¨å· (#) ã§å§ã¾ãè¡ã¯ã³ã¡ã³ãã§ãæå¹ãª URL ã¨ãã¦æ±ããã¾ãããã³ã¡ã³ãã¯ããªã³ã¯ã®ç®çã示ãããããªã³ã¯ã«é¢é£ã¥ããããã¿ã¤ãã«ãä¿æãããããç®çã§å©ç¨ã§ãã¾ãã
è¦å:
è¤æ°ã®ãªã³ã¯ã®ããã® text/plain åã®ãã©ã¼ã«ããã¯ã¯ããã¹ã¦ã® URL ãå«ãã¹ãã§ãããã³ã¡ã³ããå«ããã¹ãã§ã¯ããã¾ããã
ä¾ãã°ã以ä¸ã®ãµã³ãã« text/uri-list ãã¼ã¿ã«ã¯ã2 ã¤ã®ãªã³ã¯ã¨ 1 ã¤ã®ã³ã¡ã³ããå«ã¾ãã¦ãã¾ãã
https://www.mozilla.org # 2 ã¤ç®ã®ãªã³ã¯ http://www.example.com
ããããããããªã³ã¯ãåå¾ããæã¯ãã³ã¡ã³ããå«ãã¦è¤æ°ã®ãªã³ã¯ããã©ãã°ããå ´åã®å¦çã確å®ã«è¡ã£ã¦ãã ããã
getData()ãsetData()ãclearData() ã§ã¯ãURL åï¼å¤§æåå°æåãåºå¥ããªãï¼ã¯ text/uri-list ã¨ãã¦æ±ããã¾ããgetData() ã®å ´åãçµæã¯ãªã¹ãã®æåã® URL ã®ã¿ãå«ã¿ã¾ãã
ããã©ã«ãã§ã¯ã <a> è¦ç´ ããã©ãã°ãããã¨ã以ä¸ã®ãã¼ã¿é
ç®ã使ããã¾ãï¼
text/x-moz-urlï¼Firefox ã®ã¿ï¼:href屿§ã¨ãªã³ã¯ããã¹ãã®ä¸¡æ¹ããæ¹è¡åºåãã§è¨å®ããããtext/x-moz-url-dataï¼Firefox ã®ã¿ï¼:hrefã®ã¿ãè¨å®ããããtext/x-moz-url-descï¼Firefox ã®ã¿ï¼: ãªã³ã¯ããã¹ãã®ã¿ãè¨å®ããããtext/uri-list:href屿§ã®ã¿ãè¨å®ããããtext/htmlï¼Chrome ããã³ Firefox ã®ã¿ï¼:<a>è¦ç´ ã®å®å ¨ãª HTML ã½ã¼ã¹ãï¼ãã¹ã¦ã®ã¹ã¿ã¤ã«ãã¤ã³ã©ã¤ã³ã§ã¤ãã¦ï¼è¨å®ããããtext/plain: ãããhref屿§ãè¨å®ãããã Chrome ã¯ãããtext/uri-listã®åã«é ç½®ããã
ç»åã®ãã©ãã°
ç»åã®ç´æ¥ã®ãã©ãã°ï¼ããªãã¡ããã¼ã¿ã¯ãã¯ã»ã«ã®ã³ã³ãã³ãï¼ã¯ä¸è¬çã§ã¯ãªããä¸é¨ã®ãã©ãããã©ã¼ã ã§ã¯å¯¾å¿ãã¦ããªããã¨ãããã¾ãããã®ä»£ãããç»åã¯é常ãã® URL ã¨ãã¦ãã©ãã°ããã¾ãããã®ããã«ã¯ãä»ã® URL ã¨åæ§ã« text/uri-list åã使ç¨ãã¾ãããã¼ã¿ã¯ãç»åã® URLãã¾ãã¯ç»åãã¦ã§hããµã¤ãããã£ã¹ã¯ä¸ã«ãªãå ´å㯠data: URL ã§ããå¿
è¦ãããã¾ãã
ãªã³ã¯ã¨åæ§ã«ãtext/plain åã®ãã¼ã¿ã«ã URL ãå«ããå¿
è¦ãããã¾ãããã ããdata: URL ã¯ããã¹ã ã®ã³ã³ããã¹ãã§ã¯é常æç¨ã§ã¯ãªãããããã®ç¶æ³ã§ã¯ text/plain ãã¼ã¿ãé¤å¤ãããã¨ããå§ããã¾ãã
event.dataTransfer.items.add(imageURL, "text/uri-list");
event.dataTransfer.items.add(imageURL, "text/plain");
ããã©ã«ãã§ã¯ã <img> è¦ç´ ããã©ãã°ãããã¨ã以ä¸ã®ãã¼ã¿é
ç®ã使ããã¾ãã
text/x-moz-urlï¼Firefox ã®ã¿ï¼:src屿§ã¨ä»£æ¿ããã¹ãã®ä¸¡æ¹ãï¼ã¾ãã¯ä»£æ¿ããã¹ãã空ã§ããã°srcãç¹°ãè¿ãã¦ï¼ãæ¹è¡åºåãã§è¨å®ããããtext/x-moz-url-dataï¼Firefox ã®ã¿ï¼:src屿§ã®ã¿ãè¨å®ããããtext/x-moz-url-descï¼Firefox ã®ã¿ï¼: 代æ¿ããã¹ãã®ã¿ï¼ã¾ãã¯ä»£æ¿ããã¹ãã空ã§ããã°srcï¼ãè¨å®ããããtext/uri-list:src屿§ãè¨å®ããããtext/html:<img>è¦ç´ ã®å®å ¨ãª HTML ã½ã¼ã¹ãï¼ãã¹ã¦ã®ã¹ã¿ã¤ã«ãã¤ã³ã©ã¤ã³ã§ã¤ãã¦ï¼è¨å®ããããtext/plainï¼Firefox ã®ã¿ï¼:src屿§ãè¨å®ãããã
Safari ã¯ãç»åãã¼ã¿ãå«ããã¡ã¤ã«é
ç®ã使ãã¾ãããã®ãã¡ã¤ã«é
ç®ã«ã¯ãimage/png ãªã©ã®é©å㪠MIME ã¿ã¤ããè¨å®ããã¾ãã
è¦ç´ ã®ãã©ãã°
ãã©ãã°ãããã¢ã¤ãã ãä»»æã®è¦ç´ ã« draggable="true" ãã¤ãããã®ã§ããå ´åãè¨å®ãããã¼ã¿ã¯è»¢éãããã®ã«ãã£ã¦ç°ãªãã¾ãã
è¦ç´ ã転éããä¸è¬çãªæ¹æ³ã¯ãã·ãªã¢ã©ã¤ãºããã HTML ã½ã¼ã¹ã³ã¼ããå«ã text/html åãéä¿¡ããåä¿¡å´ã§è§£æãã¦æ¿å
¥ãããã¨ã§ããä¾ãã°ãè¦ç´ ã® outerHTML ããããã£ã®å¤ããã®ãã¼ã¿ã«è¨å®ããã®ãé©ãã¦ãã¾ããtext/xml ã使ç¨å¯è½ã§ããããã¼ã¿ãæ´å½¢å¼ã® XML ã§ãããã¨ã確èªãã¦ãã ããã
HTML ã¾ã㯠XML ãã¼ã¿ã®ãã¬ã¼ã³ããã¹ã表ç¾ã text/plain åã§å«ãããã¨ãã§ãã¾ãããã¼ã¿ã¯ã½ã¼ã¹ã¿ã°ã屿§ãä¸åå«ã¾ããããã¹ãã®ã¿ã§ããã¹ãã§ãã
event.dataTransfer.items.add("text/html", element.outerHTML);
event.dataTransfer.items.add("text/plain", element.innerText);
ç¬èªã®ç®çã®ããã«ä½æããä»ã®åã使ç¨ãããã¨ãã§ãã¾ãããã©ãã°å¯¾è±¡ãç¹å®ã®ãµã¤ããã¢ããªã±ã¼ã·ã§ã³ã«éå®ããã¦ããããã§ã¯ãªãã®ã§ããã°ã常㫠text/plain å½¢å¼ã®ä»£æ¿ãå¿
ãå«ããããã«ãã¦ãã ããããã®å ´åãã«ã¹ã¿ã åã使ç¨ãããã¨ã§ããã¼ã¿ãä»ã®å ´æã«ããããããããã¨ãé²ãã¾ãã
ãªãã¬ã¼ãã£ã³ã°ã·ã¹ãã ã®ãã¡ã¤ã«ã¨ã¯ã¹ããã¼ã©ã¼ããã®ãã¡ã¤ã«ã®ãã©ãã°
ãã©ãã°ãããã¢ã¤ãã ããã¡ã¤ã«ã®å ´åããã©ãã°ãã¼ã¿ã« file åã®ã¢ã¤ãã ã追å ããã¾ããtype ã¯ãã¡ã¤ã«ã® MIME ã¿ã¤ãï¼ãªãã¬ã¼ãã£ã³ã°ã·ã¹ãã ããæä¾ããããã®ï¼ã«è¨å®ãããåã䏿ãªå ´å㯠application/octet-stream ã¨ãªãã¾ããç¾å¨ããã©ãã°ããããã¡ã¤ã«ã¯ãã¡ã¤ã«ã¨ã¯ã¹ããã¼ã©ã¼ãªã©ããã©ã¦ã¶ã¼å¤é¨ããã®ã¿çºçå¯è½ã§ãã
Firefox ã¯ã¾ããã¦ã¼ã¶ã¼ã®ãã¡ã¤ã«ã·ã¹ãã ä¸ã®ãã¡ã¤ã«ã®å®å
¨ãªãã¹ãå«ããæ¨æºå¤ã® application/x-moz-file åã®ããã¹ãé
ç®ã追å ãã¾ããç¹æ¨©ã³ã¼ãï¼æ¡å¼µæ©è½ãªã©ï¼å
ã§ãªãéãããã®å¤ã¯ç©ºæååã§ãã
ãªãã¬ã¼ãã£ã³ã°ã·ã¹ãã ã®ãã¡ã¤ã«ã¨ã¯ã¹ããã¼ã©ã¼ã¸ã®ãã¡ã¤ã«ã®ãã©ãã°
ãã©ã¦ã¶ã¼ã®å¤é¨ã«è»¢éã§ããå 容ã¯ã主ã«ä½¿ç¨ãããã©ã¦ã¶ã¼ã¨ãã©ãã°å ã®å ´æã«ãã£ã¦ç°ãªãã¾ããç»åã®ãã©ãã°ã¯ä¸è¬ã«ãã¼ã«ã«ãã¡ã¤ã«ã·ã¹ãã ã¸ã®è»¢éãã§ããããã«ãªã£ã¦ãããç»åããã¦ã³ãã¼ãããã¾ãã
Chrome ã¯æ¨æºå¤ã® DownloadURL åã«å¯¾å¿ãã¦ãã¾ãããã¼ã¿æ¬ä½ã¯ã<MIME ã¿ã¤ã>:<ãã¡ã¤ã«å>:<ãã¡ã¤ã« URL> ã®å½¢å¼ã®ããã¹ãã§ããå¿
è¦ãããã¾ãã
event.dataTransfer.items.add(
"DownloadURL",
"image/png:example.png:data:image/png;base64,iVBORw0K...",
);
ããã«ãããä»»æã®ãã¡ã¤ã«ããã¡ã¤ã«ã¨ã¯ã¹ããã¼ã©ã¼ã«ãã©ãã°ããã¨ããã¾ãã¯å¥ã®ãã©ã¦ã¶ã¼ã¦ã£ã³ãã¦ã«ããããããã¨ãã«ããããããã¡ã¤ã«ãããããããããã®ããã«ãã¦ã³ãã¼ãã§ãã¾ãï¼ãã ã CORS å¶éãé©ç¨ãããå ´åãããã¾ãï¼ãå®ç¨ä¾ã«ã¤ãã¦ã¯ Gmail ã®ãããªãã¡ã¤ã«ãã©ãã°æ©è½ãåç §ãã¦ãã ããã