1

ドロップ領域に ondrop イベントを設定しました。デスクトップからドロップ領域に画像をドラッグすると、イベントを受け取ります。

ただし、Recommended_Drag_Types ドキュメントによると:

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

ローカル ファイルは、データ値が nsIFile オブジェクトである application/x-moz-file タイプを使用してドラッグされます。特権のない Web ページは、このタイプのデータを取得または変更できません。

それは理にかなっていますが、ユーザーに権限をエスカレートしてファイルデータにアクセスし、それを ? 経由で送信するように求めるにはどうすればよい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 に答える