【发布时间】:2016-08-17 18:52:23
【问题描述】:
我正在为 Angular 创建一个小拖放指令,该指令检测从另一个浏览器窗口/选项卡拖动的 URL,并且刚刚发现还可以使用此属性读取原始锚文本:
xMozUrl = event.dataTransfer.getData('text/x-moz-url');
https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Recommended_Drag_Types#link
这看起来很方便,因为我可以显示链接文本
在从拖动的锚点中检索实际的链接文本时,Mozilla 的自定义 Event.dataTransfer 属性是否有(出血边缘)替代方案?我在文档上找不到任何东西。 IE 10/11/Edge 也非常感谢。
在某些情况下,这是当前整个 'drop' 监听器:
$document.bind("drop", function(event) {
event.preventDefault();
event.stopPropagation();
if (event.target == target || event.target.parentNode == target) {
try {
var url,
linkText = '',
xMozUrl = event.dataTransfer.getData('text/x-moz-url');
if (xMozUrl.length > 0) {
// mozilla also sends the link text so we can extract some kind of 'title'
var uriParts = xMozUrl.split("\n");
url = uriParts[0];
linkText = uriParts[1];
} else {
// should return the first valid URL found in dataTransfer
// https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Recommended_Drag_Types#link
url = event.dataTransfer.getData('URL').toString();
title = '';
}
if (url.length > 0) {
$scope.url = url;
$scope.$emit('drag-link:drag:drop', {
url : url,
title : linkText
});
}
} catch (e) {
console.error(e);
}
} else {
console.log("drop", event, event.target, event.toElement, $elem);
}
});
编辑
刚刚通过测试发现 IE 10,11 根本不支持将锚点拖动到打开的页面。在 10 月 11 日,URL 刚刚打开,好像没有 event.preventDefault()
【问题讨论】:
标签: javascript angularjs drag-and-drop cross-browser