2015-02-06 60 views
2

將文件拖放到元素上時,Chrome通過引用要刪除的文件的對象填充放置事件的dataTransfer.items數組。 Firefox和IE不支持。這些瀏覽器都會填充dataTransfer.files屬性。拖放文件時,dataTransfer.items屬性在Firefox和IE中未定義,但不是Chrome

function doDrop(e) { 
    e.stopPropagation(); 
    e.preventDefault();  
    var files = e.dataTransfer.files //All browsers have this property 
    var items = e.dataTransfer.items //Only Chrome has this property 
} 

那麼爲什麼瀏覽器的區別呢? Chrome是否正確? IE和Firefox在後面?是否有任何「正式」文件或資料來解釋這一點?

在各種瀏覽器中運行File Drop Plunkr Example以查看區別。

+0

'e.dataTransfer.files'在Firefox中不起作用。 – zemirco 2016-04-22 09:11:23

回答

3

根據HTML5.1規格(http://www.w3.org/TR/html51/editing.html#the-datatransfer-interface

interface DataTransfer { 
    attribute DOMString dropEffect; 
    attribute DOMString effectAllowed; 

    [SameObject] readonly attribute DataTransferItemList items; 

    void setDragImage(Element image, long x, long y); 

    /* old interface */ 
    [SameObject] readonly attribute DOMString[] types; 
    DOMString getData(DOMString format); 
    void setData(DOMString format, DOMString data); 
    void clearData(optional DOMString format); 
    [SameObject] readonly attribute FileList files; 
}; 

注意,files屬性是「舊接口」一節中,而items是在當前的接口。

因此,Chrome似乎領先於曲線。它正在實現舊界面和當前界面,而其他瀏覽器只實現舊界面。

相關問題