Firebreath插件,如何读取<param />值

时间:2014-05-21 13:37:20

标签: plugins browser firebreath

我想阅读自定义插件的<param>

我在互联网上找不到答案,我发现的是:
https://github.com/firebreath/FireBreath/blob/master/src/NpapiCore/NpapiPlugin.cpp#L76

我看到params存储在pluginMain->setParams(paramList);

您能指出我以后如何访问此paramList吗?或pluginMain
pluginMain->getParams()吗?我找不到参考文献
我也找不到setParams()的来源。

问题是,如何从PluginWindowXXXFB::NpapiPluginXXX获取参数?

我将m_npHost导出到PluginWindowXXX,使用gdb在其中设置断点但仍未成功。

我能想到的只有:

(gdb) p ((FB::Npapi::NpapiBrowserHost)this->m_npHost)->GetValue
$17 = {NPError (const FB::Npapi::NpapiBrowserHost * const, NPNVariable, void *)} 0x7fe435adeff8 <FB::Npapi::NpapiBrowserHost::GetValue(NPNVariable, void*) const>

显然我做错了但是我被困了 我从NpapiPluginX11.cpp

传递此主机
pluginWin->setHost(m_npHost);

2 个答案:

答案 0 :(得分:1)

像往常一样,taxilian的回答是最正确的,但我会尝试一下。我在MyPluginAPI构造函数中读取params。

MyPluginAPI::MyPluginAPI(const MyPluginPtr& plugin, const FB::BrowserHostPtr& host) : m_plugin(plugin), m_host(host)
{
    string settings; //<param name="settings" value="{'foo':'bar'}">
    settings = plugin->getParam("settings");    
}

答案 1 :(得分:0)

在PluginCore派生类中,您可以使用getParam方法或getParamVariant方法。

来自FireBreath Source

boost::optional<std::string> PluginCore::getParam(const std::string& key) {
    boost::optional<std::string> rval;
    FB::VariantMap::const_iterator fnd = m_params.find(key.c_str());
    if (fnd != m_params.end())
        rval.reset(fnd->second.convert_cast<std::string>());
    return rval;
}

FB::variant FB::PluginCore::getParamVariant( const std::string& key )
{
    FB::VariantMap::const_iterator fnd = m_params.find(key.c_str());
    if (fnd != m_params.end())
        return fnd->second;
    return FB::variant();
}

因此,如果它确实是一个字符串(它几乎就是,除非它以on开头,在这种情况下它可能已被转换为引用的函数),你可以使用:

boost::optional<std::string> mystr = getParam("mystr");
if (mystr) { 
   call_fn_with_string(*mystr);
}

或者,您可以将其作为变体并将其转换为:

FB::variant mystrVal = getParamVariant("mystr");
try {
    call_fn_with_string(mystrVal.convert_cast<std::string>());
} catch (FB::bad_variant_cast &err) {
    // What to do if the cast to string fails
}