2013-10-10 33 views
0

如何獲取C++部分中的文檔屬性?例如,我想獲取document.title並將其存儲在firebreath插件的C++部分中?Firebreath插件:如何獲取C++部分中的文檔屬性?

if (window && window->getJSObject()->HasProperty("domain")) { 
    FB::JSObjectPtr docObj = window->getProperty<FB::JSObjectPtr>("document"); 

    consoleObj->Invoke("log", FB::variant_list_of("Has obtained document")); 

    if(docObj && docObj->HasProperty("domain")){ 
     m_domain = docObj->getJSObject()->getProperty<std::string>("domain"); 
     consoleObj->Invoke("log", FB::variant_list_of("Has obtained domain: " + m_domain)); 
    } 

} 

但是由於docObj沒有方法HasProperty,所以無法編譯。我不知道使用什麼幫助方法。

回答

2

對不起,當你在FireBreath聊天室問我正在睡覺。稍微更簡化的方法是:

FB::DOM::DocumentPtr dom = m_host->getDOMDocument(); 
try { 
    if (dom && dom->getJSObject()->HasProperty("title")) { 
     std::string title = m_host->getDOMDocument()->getProperty<std::string>("title"); 
    } 
} catch (...) { 
    // Could not get the title 
} 

如果轉換失敗,您應該總是將convert_cast包裝在try .. catch中。這裏的DOM :: Document對象的getProperty抽象基本上只是在內部執行convert_cast。

0

如果有人想知道的答案:

FB::DOM::DocumentPtr dom = m_host->getDOMDocument(); 
if (dom && dom->getJSObject()->HasProperty("title")) { 
    std::string title = m_host->getDOMDocument()->getJSObject()->GetProperty("title").convert_cast<std::string>(); 
}