2012-01-06 3 views
0

я функция подвергается JavaScript:Как получить полный путь javascript event.DataTransfer объект, переданный в C++ npapi-функцию плагина?

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

, который вызывается из Javascript из OnDrop (события) обработчика:

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.

Возможно ли извлечь весь путь удаленных файлов из объекта datatransfer с помощью NPAPI и как вы на самом деле делаете конверсии?

Спасибо.

ответ

1

Ну, minor проблема, с которой вы столкнулись, заключается в том, что nsIDOMDataTransfer на самом деле не является NPAPI. Это XPCOM, который отличается (но в некоторых случаях, связанных с историей). Если вы посмотрите на документы для NPN_GetValue, вы обнаружите, что NPNVDomWindow, который однажды может дать вам ссылку XPCOM на окно DOM, равен no longer supported as of FireFox 3.6. Точно так же вы не можете передавать объекты из javascript и получать ссылки XPCOM на них за тот же период времени.

Отчасти из-за этого XPCOM как метод реализации интерфейса сценариев в плагине устарел много лет, и люди все еще пытались его использовать. Ни один другой браузер NPAPI не поддерживает его, все они используют NPRuntime.

В любом случае, длинные и короткие вещи состоят в том, что если вы не можете получить необходимую информацию с помощью javascript, вы также не сможете подключиться к плагину. Хорошей новостью является то, что плагин может быть целью перетаскивания. Плохая новость - мне никогда не нужно, поэтому я не знаю, как это сделать.] Это может быть разумным выбором для другого вопроса.

Извините, что я не могу помочь

+0

Спасибо за информацию. У меня было требование создать плагин без окон, который мог бы получить полные пути от файлов, упавших на определенные элементы. Я думаю, что оконный плагин, который принимает перетаскивание, является единственным способом получить полный путь данных. – rhaoosh

+0

это похоже. вы можете посмотреть исходный код на google gears, который поддерживает перетаскивание. – taxilian