0

我是插件开发的新手。有人告诉我使用 Firebreath 来开发 npapi 插件,结果证明它非常简单。现在,我希望访问传递给插件的响应的 http 响应标头。但我想不出办法,因为他们的文件稀缺,可用于喷火。在 NPAPI 教程中,他们使用 npstream,但我不知道如何在 firebreath 中使用这种结构。任何帮助将不胜感激。

更新:

void tPlugin::handleUnsolicitedStream(FB::BrowserStreamRequest& req)
{ 
 const FB::PluginEventSinkPtr sinkPtr;
 req.setEventSink(sinkPtr);
 responseHeaders = req.headers;
 FB::HeaderMap::const_iterator it = responseHeaders.begin();
 str = (*it).first + " : " + (*it).second;                   // str is a class variable
 FB::DOM::WindowPtr window = m_host->getDOMWindow();
 window->alert(str);
 str = "hello";
 window->alert(fname);
}

没有出现任何警告框!

void tPlugin::onPluginReady()
{
   FB::DOM::WindowPtr window = m_host->getDOMWindow();
   window->alert(str);
}

出现一个空警报框!

4

1 回答 1

1

如果您阅读了您正在使用的 BrowserStreamRequest 对象的源代码,或者如果您阅读了创建它的源代码,您会发现该对象上有一个 headers 变量。

FB::HeaderMap headers;

FB::HeaderMap 当然是在SimpleStreamHelper.h中定义的:

typedef std::multimap<std::string, std::string> HeaderMap;

而且,澄清一下,有很多关于 FireBreath 的文档;对于这个特殊的功能来说并不是很多,它只在树中出现了大约一个月。

编辑:从过去的对话中,我很确定您已经在处理这个问题,但是浏览器创建的流是通过 BrowserStreamRequest 对象传递给您的插件对象上的handleUnsolicitedStream方法的;默认情况下,fbgen 模板中的插件不会覆盖此方法,但您可以添加它。

于 2012-11-05T16:28:03.693 回答