Can I drag files from the desktop to a drop area in Firefox 3.5 and initiate an upload?

[亡魂溺海] 提交于 2019-12-23 02:54:16

问题


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.


回答1:


If you haven't upgraded to 3.5 yet, you can use the dragdropupload extension.




回答2:


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!