【问题标题】:Firebreath plugin, how to read <param > valuesFirebreath 插件,如何读取 <param> 值
【发布时间】:2014-05-21 13:37:19
【问题描述】:

我想读取自定义插件的&lt;param&gt;

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

我看到参数存储在pluginMain-&gt;setParams(paramList);

你能指出我以后如何访问这个 paramList 吗?或pluginMain
pluginMain-&gt;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);

【问题讨论】:

    标签: plugins browser firebreath


    【解决方案1】:

    taxilian 的答案一如既往是最正确的,但我会试一试。我正在 MyPluginAPI 构造函数中读取参数。

    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");    
    }
    

    【讨论】:

    • 谢谢哈萨和出租车司机。我尝试了这两种方法,多亏了你,他们现在正在工作
    【解决方案2】:

    在 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
    }
    

    【讨论】:

      猜你喜欢
      • 2013-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-13
      相关资源
      最近更新 更多