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 数据传输对象看起来像是实现了 nsIDOMDataTransfer 接口。

这甚至可以使用 NPAPI 从数据传输对象中提取完整的删除文件路径,以及您如何实际进行转换以到达那里?

谢谢。

4

1 回答 1

1

好吧,您在这里遇到的问题是 nsIDOMDataTransfer 实际上不是 NPAPI。那是 XPCOM,这是一个不同的(但在某些历史案例中相关)的东西。如果您查看NPN_GetValue的文档,您会发现从 FireFox 3.6 开始不再支持NPNVDomWindow,它曾经可以为您提供对 DOM 窗口的 XPCOM 引用。同样,您不能从 javascript 中传入对象并在同一时间段内获取对它们的 XPCOM 引用。

部分原因是 XPCOM 作为一种在插件上实现脚本接口的方法已被弃用多年,人们仍在尝试使用它。没有其他 NPAPI 浏览器支持它,它们都使用 NPRuntime。

无论如何,总而言之,如果您无法使用 javascript 获得所需的信息,那么您也无法使用该插件。好消息是插件可以成为拖放目标。坏消息是我从来不需要,所以我不知道如何 =] 这可能是另一个问题的合理选择。

对不起,我帮不上什么忙

于 2012-01-06T06:52:31.850 回答