如何在MSHTML中设置整个HTML?

时间:2010-03-20 13:41:27

标签: html delphi mshtml

如何在MSHTML中设置整个HTML?

我正在尝试使用此作业:

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

但我得到了错误:

  

“目标元素对此无效   操作“

我也尝试过使用

(Document as IHTMLDocument2).write 

但是这个表单只在主体部分添加了HTML,我需要替换所有HTML源代码 有人知道我是怎么做到的吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

以下是我的一些旧代码,看看它是否对您有所帮助:

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;

答案 1 :(得分:0)

作为替代方案,您还可以使用TEmbededWB这是Web浏览器的扩展包装器,并且提供了一些易于使用的方法来提供此功能。