2009-07-01 29 views
1

我在拖放区域设置了一个ondrop事件,当我从桌面拖动图像到拖放区域时,它会收到一个事件。我可以将文件从桌面拖到Firefox 3.5中的拖放区域并启动上传吗?

然而,根据Recommended_Drag_Types文件:

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.

这是有道理的,但我怎么提示用户提升权限以访问文件数据,并通过发送XMLHttpRequest

如果我尝试没有升级权限,当我做这个代码:

event.dataTransfer.mozSetDataAt("application/x-moz-file", file, 0); 

的Javascript返回此错误:

Permission denied for domain.com to create wrapper for object of class UnnamedClass 

我可以找到关于这个问题的唯一物品是从2005年,但我不知道方向仍然适用于Firefox 3,它建议这样做:

netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); 

其中d似乎没有工作。

+0

你找到了答案吗?我希望能够至少捕获本地网址。有任何想法吗? thx男人 – 2009-11-12 04:17:13

+0

它现在可能!看到我的答案:http://stackoverflow.com/a/33431704/195216 – dforce 2015-10-30 08:40:45

回答

0

如果您还没有升级到3.5版,您可以使用dragdropupload扩展名。

+0

谢谢,但我从更多的Web开发人员的角度思考这个问题,我认为大多数人会升级到Firefox v3.5,但会少得多安装了这个扩展。 – bertrandom 2009-07-01 09:04:49

0

我发现,如果不是全球不断升级的特权:

 
    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); 
    ... 
    function doDrop(event) { 
     ... 
     var file = event.dataTransfer.mozGetDataAt("application/x-moz-file", 0); 
     ... 
    } 

我升级的函数体特权:

 
    ... 
    function doDrop(event) { 

     netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); 
     ... 
     var file = event.dataTransfer.mozGetDataAt("application/x-moz-file", 0); 
     ... 
    } 

我摆脱错误的,你描述并获得了nsIFile我正在寻找的实例。