1

我在放置区域设置了一个 ondrop 事件,当我将图像从桌面拖到放置区域时,它会收到一个事件。

但是,根据Recommended_Drag_Types 文档:

https://developer.mozilla.org/en/DragDrop/Recommended_Drag_Types

使用 application/x-moz-file 类型拖动本地文件,其数据值为 nsIFile 对象。非特权网页无法检索或修改此类数据。

这是有道理的,但我如何提示用户升级权限以访问文件数据并通过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');

这似乎不起作用。

4

2 回答 2

0

我发现如果不是在全球范围内提升权限:

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

我在函数体中提升权限:

    ...
    函数doDrop(事件){

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

我摆脱了您描述的错误并获得了对nsIFile我正在寻找的实例的访问权限。

于 2010-03-09T16:44:20.613 回答
0

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

于 2009-07-01T08:56:37.553 回答