Uma implementação leve de análise. Este código não baixará nenhuma informação da Internet, nem executará scripts, é puramente analisando.
A análise é implementada através do MSHTML da MarkupService. Para usar esse código corretamente, você precisa adicionar uma referência MSHTML.
Como a interface dos imersistas não é definida no .NET, ela deve ser implementada por si só, e a definição da interface é:
O conteúdo a seguir é o código do programa:
[Comvisible (true), comimport (), GUID ("7FD52380-4E07-101B-AE2D-08002B2EC713"), interfaceTypeattribute (ComInterfacetype.Interfaceisiunknown)]
publicInterfaceipersistSisttreaminit
{
voidgetClassId ([in, out] refGuidpClassid);
[Return: Marshalas (UnManagedType.i4)] [PreserveSig]
intisdirty ();
voidload ([in, marshalas (não managedType.Interface)] uComistreampstm);
VoidSave ([in, marshalas (UnManagedType.Interface)] Ucomistreampstm,
[in, marshalas (não -managedtype.i4)] intfcleardirty);
VoidgetSizemax ([Out, Marshalas (UnManagedType.lParray)] Longpcbsize);
voidinitNew ();
}
O conteúdo a seguir é o código do programa:
inseguihtmldocument2parse (strings)
{
ihtmldocument2pdocument = newhtmldocumentClass ();
if (pdocument! = null)
{
iPersistStreaminitppersist = pdocumentSperSistStStreaminit;
ppsist.initNew ();
ppsist = nulo;
imakupServicesMs = pdocumentasimarkupServices;
if (ms! = null)
{
imarkupContainerpmc = null;
imarkuppointerpstart, pend;
ms.createmarkuppointer (outpstart);
ms.createmarkuppointer (ultrapassado);
StringBuildersB = NewstringBuilder (s);
intptrpSource = marshal.stringtohglobaluni (s);
ms.parsestring (ref*(ushort*) psource.topointer (), 0, outpmc, pstart, pend);
if (pmc! = nulo)
{
marechal.release (psource);
returnpmcasihtmldocument2;
}
marechal.release (psource);
}
}
returnNull;
}
Algo deu errado ao escrever o código. O primeiro parâmetro do MarkupService :: parsestring é o reembolso. Obviamente, para passar no código HTML, este USHort deve ser o primeiro Widechar, então aqui ignoramos o aviso do compilador usando o código inseguro.