2014-05-21 56 views
0

我想讀的自定義插件的<param>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_npHostPluginWindowXXX,用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); 

回答

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

因此,如果是肯定的字符串(它幾乎是,除非它始於上,在這種情況下,它可能已被轉換爲引用的函數),你可以使用:

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

謝謝你們,hasa和taxilian。我嘗試了兩種方法,現在他們正在工作,這要感謝你 – user3660738

相關問題