如何在MSHTML中设置整个HTML? [英] How to set entire HTML in MSHTML?

查看:201
本文介绍了如何在MSHTML中设置整个HTML?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在MSHTML中设置整个HTML?

How to set entire HTML in MSHTML?

我试图使用这个任务:

I am trying using this assignment:

   (Document as IHTMLDocument3).documentElement.innerHTML := 'abc';  

但我收到错误:

but I got the error:


这个
操作的目标元素无效

"Target element invalid for this operation"

我也试过使用 p>

I've also tried using

(Document as IHTMLDocument2).write 

但这种形式只会将HTML添加到正文部分,而我需要替换所有HTML源。

有人知道我是如何做到这一点的吗?

but this form only adds HTML into the body section, and I need to replace all the HTML source.
Does somebody have any idea of how I do this?

在此先感谢。

推荐答案

以下是我的一些旧代码,看看它是否可以帮助你:

Here's some of my old code, see if it helps you:

type
  THackMemoryStream = class(TMemoryStream);

procedure Clear(const Document: IHTMLDocument2);
begin
  Document.write(PSafeArray(VarArrayAsPSafeArray(VarArrayOf([WideString('')]))));
  Document.close;
end;

procedure LoadFromStream(const Document: IHTMLDocument2; Stream: TStream);
var
  Persist: IPersistStreamInit;
begin
  Clear(Document);
  Persist := (Document as IDispatch) as IPersistStreamInit;
  OleCheck(Persist.InitNew);
  OleCheck(Persist.Load(TStreamAdapter.Create(Stream)));
end;

procedure SetHtml(const Document: IHTMLDocument2; const Html: WideString);
var
  Stream: TMemoryStream;
begin
  Stream := TMemoryStream.Create;
  try
    THackMemoryStream(Stream).SetPointer(PWideChar(Html), (Length(Html) + 1) * SizeOf(WideChar));
    Stream.Seek(0, soFromBeginning);
    LoadFromStream(Document, Stream);
  finally
    Stream.Free;
  end;
end;

这篇关于如何在MSHTML中设置整个HTML?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆