- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你好,我正在尝试使用 chrome 将文件拖放到我的文件系统中,但我在控制台中收到以下错误:
var dnd = new DnDFileController('body', function(files, e) {
var items = e.dataTransfer.items;
for (var i = 0, item; item = items[i]; ++i) {
traverseFileTree(item.webkitGetAsEntry());
**Uncaught TypeError: Object #<DataTransferItem> has no method 'webkitGetAsEntry'**
}
});
我也试过像这样在循环中添加方法:
for (var i = 0, item; item = items[i].webkitGetAsEntry();; ++i) {
traverseFileTree(item);
}
错误是这样的:
Uncaught TypeError: Object #<DataTransferItem> has no method 'webkitGetAsEntry' app.js:513
(anonymous function) app.js:513
DnDFileController.drop dnd.js:27
DNDFileController.drop 代码如下:
this.drop = function(e) {
e.stopPropagation();
e.preventDefault();
el_.classList.remove('dropping');
onDropCallback(e.dataTransfer.files, e);
};
但是我得到了同样的错误,有什么想法吗?谢谢。
最佳答案
大概您正在使用这个 DnDFileController - http://html5-demos.appspot.com/static/filesystem/filer.js/demos/js/dnd.js .因此,首先,我已将您的代码置于可测试状态:
function DnDFileController(selector, onDropCallback) {
var el_ = document.querySelector(selector);
this.dragenter = function(e) {
e.stopPropagation();
e.preventDefault();
el_.classList.add('dropping');
};
this.dragover = function(e) {
e.stopPropagation();
e.preventDefault();
};
this.dragleave = function(e) {
e.stopPropagation();
e.preventDefault();
//el_.classList.remove('dropping');
};
this.drop = function(e) {
e.stopPropagation();
e.preventDefault();
el_.classList.remove('dropping');
onDropCallback(e.dataTransfer.files, e);
};
el_.addEventListener('dragenter', this.dragenter, false);
el_.addEventListener('dragover', this.dragover, false);
el_.addEventListener('dragleave', this.dragleave, false);
el_.addEventListener('drop', this.drop, false);
};
var dnd = new DnDFileController('body', function(files, e) {
var items = e.dataTransfer.items;
for (var i = 0, item; item = items[i]; ++i) {
if (item.kind == 'file') {
debugger
console.log(item.webkitGetAsEntry());
}
}
});
现在,在调试器中检查 item 的状态,在 Chrome 20.0.1132.27 beta 中,它仅公开当前规范 [1] 中的那些属性和方法 - 即 item.kind、item.type、item .getAsString(回调) 和 item.getAsFile()。 DataTransferItem.webkitGetAsEntry() 未公开。据我所知[2],Chrome 不应该公开他们提议的 webkitGetAsEntry,并且在将其打开仅一周后[3],他们又关闭了它的开关。所以目前,除非您使用任何标志来启用它,否则它不会启用[4]。
启用它后,它看起来也像 getAsString 一样与回调一起使用,而不仅仅是作为 getter。参见 [5] 中的示例:
var items = e.dataTransfer.items;
for (var i = 0; i < items.length; ++i) {
if (items[i].kind == 'file') {
items[i].webkitGetAsEntry(function(entry) {
displayEntry(entry.name + (entry.isDirectory ? ' [dir]' : ''));
...
});
}
}
请注意,他们还将其包装在一个保护性检查中,以确保 file[i] 实际上是一个文件;这在我上面的测试代码中,但在您的代码中缺失。
但是如果您只是想访问这些文件,您是否有理由要使用这种实验方法?这是一个非常简单的循环,使用 FileReader 读取文件,然后对其进行 Blob 化,然后将其存储在本地文件系统中……所有这些方法都远没有那么实验性和新颖性。
引用:
[1] http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-datatransferitem-interface
[2] http://trac.webkit.org/changeset/118507
[3] http://code.google.com/p/chromium/issues/detail?id=129702
[4] https://bugs.webkit.org/show_bug.cgi?id=87457
[5] http://lists.w3.org/Archives/Public/public-whatwg-archive/2012Apr/0078.html
============================================= =======
2012 年 7 月 26 日更新:
此方法现已删除标志要求,并可在 2012 年 7 月 23 日发布的 Chrome 21 中用于一般用途。但是,对于此处描述的用例,上述实现起来要简单得多,并且更符合需求,因为不需要同时读取整个目录。
关于javascript - html5 拖放 - items.webkitGetAsEntry() 方法不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11477412/
我在这里有一个我想要做的事情的例子:http://jsbin.com/OwoYAlEQ/1/edit 这是我的 HTML: person one person two person three per
我想知道是否有人知道是否有一个预先制定的解决方案:我在 ASP.net 网站上有一个列表,我希望用户能够通过拖放对列表进行重新排序。此外,我希望有第二个列表,用户可以将第一个列表中的项目拖到其中。 到
我想知道是否有人知道是否有一个预先制定的解决方案:我在 ASP.net 网站上有一个列表,我希望用户能够通过拖放对列表进行重新排序。此外,我希望有第二个列表,用户可以将第一个列表中的项目拖到其中。 到
我在我的 Web 应用程序中使用 Ajax ControlToolkit 中的 ModalPopupExtender。我将其 Drag 属性设置为 true,但是当我拖动弹出面板并将其放到新位置时,它
所以,基于this answer ,我有一组可以拖放并卡入到位的 div。唯一的问题是,可拖动的 div 具有不同的高度,我需要它们始终捕捉到目标的底部,而不是顶部。 您可以在this JsFiddl
我一直在使用 Bea 的解决方案 here一段时间后发现它非常有帮助。现在我遇到的问题是,当我将项目拖放到另一个 ListView 控件中或拖放到另一个 ListView 控件中,并且我想在拖动“期间
我试图在使用 QTreeWidget.setItemWidget() 重新父级(拖放)后将小部件放入 QTreeWidgetItem 但是,如果编译以下代码,结果是 QTreeWidgetItem 内
这是场景,我使用的是prototype和scriptaculous,但我相信jquery也会有同样的问题。我在相对定位的 div 中有一个可拖动图像的列表。问题是我无法将图像拖出父 div...好吧.
我正在使用一个普通(Bootstrap)表,我想在其中包含可排序的行。我正在使用 Angular CDK (DragDropModule) 来实现排序/排序。但是,当拖动行时,它会扭曲宽度,因为 cd
我正在尝试在我的 UICollectionView 中实现拖放机制,这与在快捷方式应用程序中重新排序快捷方式的组件非常相似。 截至目前,行为是当您开始拖动时,会留下一个透明的单元格 View ,而另一
我有以下 Jquery UI 拖放 jsfiddle https://jsfiddle.net/zoojsfiddle/ud96jdcp/ 具有
我希望创建一个基于网络的“公告板”,可以这么说,用户可以在其中创建/删除/拖放“图钉”,而不允许重叠“图钉”。 这是一个图表,应该有助于说明我正在尝试创建的内容: 'pins' 可能已创建双击;他们会
我是一名优秀的程序员,十分优秀!