I've set a ondrop event on my drop area and it receives an event when I drag an image from my desktop to the drop area.
However, according to the Recommended_Drag_Types document:
https://developer.mozilla.org/en/DragDrop/Recommended_Drag_Types
A local file is dragged using the application/x-moz-file type with a data value that is an nsIFile object. Non-privileged web pages are not able to retrieve or modify data of this type.
That makes sense, but how do I prompt the user to escalate privileges to get access to the file data and send it via an XMLHttpRequest
?
If I try it without escalating privileges when I do this code:
event.dataTransfer.mozSetDataAt("application/x-moz-file", file, 0);
Javascript returns this error:
Permission denied for domain.com to create wrapper for object of class UnnamedClass
The only article I can find on this is one from 2005 but I can't tell if the directions still apply to Firefox 3, it suggest doing this:
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
which doesn't seem to work.
If you haven't upgraded to 3.5 yet, you can use the dragdropupload extension.
I found out that if instead of escalating privileges globally:
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); ... function doDrop(event) { ... var file = event.dataTransfer.mozGetDataAt("application/x-moz-file", 0); ... }
I escalate privileges in the function's body:
... function doDrop(event) { netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); ... var file = event.dataTransfer.mozGetDataAt("application/x-moz-file", 0); ... }
I get rid of the error you described and gain access to the nsIFile
instance I was looking for.
来源:https://stackoverflow.com/questions/1067947/can-i-drag-files-from-the-desktop-to-a-drop-area-in-firefox-3-5-and-initiate-an