Подобная тема уже обсуждалась:
http://forum.mozilla-russia.org/viewtopic.php?id=8417
javascript это делает так:
var cont = window.getBrowser().contentDocument; var ser = new XMLSerializer(); var st = ser.serializeToString(cont);
Мне нужно получить все то же самое только из С++ кода и именно в таком же виде, то есть не просто содержимое между [html] и [/html], а все, все, все, даже если страница с ошибкой и что-то записано вне этого тега + <!DOCTYPE и прочее
Сейчас я просто передаю строку st в XPCOM компоненту, но это решение не совсем красивое, потому как совершенно точно должен быть способ получить всю DOM структуру документа посредсвом интерфейсов Mozilla
Я уже могу получить nsIDOMDocument и nsIDOMWindow, но что-то с ними не все так просто ...
Подскажите, пожалуйста, как быть.
Отсутствует
Решение, господа.
NS_IMETHODIMP MyComponent::GetDOM(nsIDOMDocument *doc, PRInt32 *_retval)
{ nsresult rv; nsCOMPtr<nsIDOMSerializer> pSerializer = do_CreateInstance(NS_XMLSERIALIZER_CONTRACTID, &rv); nsEmbedString nsHtml; pSerializer->SerializeToString(doc, nsHtml); nsEmbedCString strOut; NS_UTF16ToCString(nsEmbedString(nsHtml), NS_CSTRING_ENCODING_UTF8, strOut); std::stringstream ss; ss << strOut.get(); MessageBox(NULL, ss.str().c_str(), "", MB_OK); return NS_OK; }
Отсутствует