Как получить полные пути события JavaScript. Объект DataTransfer, переданный в функцию плагина c ++ npapi? - PullRequest
0 голосов
/ 06 января 2012

У меня есть функция, доступная для javascript:

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 Объект передачи данных выглядит так, как будто он реализует интерфейс nsIDOMDataTransfer.

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

Спасибо.

1 Ответ

1 голос
/ 06 января 2012

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

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

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

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

...