0

私はJavaScriptに公開された関数を持っています:

bool handleDrop( const NPVariant * args, uint32_t argCount, NPVariant* result){
     //Extract the full paths from the DataTransfer object passed into args
}

これは、onDrop(event) ハンドラーから Javascript から呼び出されます。

plugin.handleDrop(event.DataTransfer);

私は ActiveX バージョンで成功しました:

void handleDrop (IDispatch* arg){
     //Extract paths using QueryInterface for IID_IHTMLDataTransfer,
     // IID_IServiceProvider, IID_IDataObject  which gets dropfiles list
}

NPAPI バージョンでも同じことをしたいです。MDN によると: https://developer.mozilla.org/En/DragDrop/DataTransfer datatransfer オブジェクトは、nsIDOMDataTransfer インターフェイスを実装しているように見えます。

これは、NPAPI を使用してデータ転送オブジェクトからドロップされたファイルの完全なパスを抽出することさえ可能ですか?実際にそこに到達するための変換をどのように行うのですか?

ありがとう。

4

1 に答える 1

1

ここで遭遇する小さな問題は、nsIDOMDataTransfer が実際には NPAPI ではないということです。それは XPCOM であり、これは別のものです (ただし、いくつかの歴史的なケースに関連しています)。NPN_GetValueのドキュメントを見ると、以前は DOM ウィンドウへの XPCOM 参照を提供できた NPNVDomWindow が、FireFox 3.6 以降ではサポートされていないことがわかります。同様に、JavaScript からオブジェクトを渡して、同じ期間のオブジェクトへの XPCOM 参照を取得することはできません。

この理由の一部は、プラグインにスクリプト インターフェイスを実装する方法としての XPCOM が何年も前から廃止されており、人々がまだそれを使用しようとしていたことです。他の NPAPI ブラウザーはそれをサポートしていません。それらはすべて NPRuntime を使用します。

とにかく、要するに、javascript で必要な情報を取得できない場合は、プラグインでも取得できないということです。幸いなことに、プラグインをドラッグ アンド ドロップのターゲットにすることができます。悪いニュースは、私がする必要がなかったので、方法がわからないということです =] それは別の質問の合理的な選択かもしれません。

あまりお役に立てなくてすみません

于 2012-01-06T06:52:31.850 に答える