Подобная тема уже обсуждалась:
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;
}