Firebreath插件:如何在c ++部分获取文档属性?

时间:2013-10-10 07:43:52

标签: c++ dom firebreath

如何在c ++部分获取文档属性?例如,我想获取document.title并将其存储在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 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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>();
}