delphi的twebbrowser设置属性样式对Element没有影响

时间:2014-11-22 17:30:54

标签: delphi twebbrowser

我使用

为段落

IHTMLElement设置属性样式

Elem.style.setAttribute(' TEXT-ALIGN''中心',0);

样式是用html编写的,但TWebBrowser组件不会使文本居中。

保存并重新打开html文档后,文本显示在中心。

我应该怎样做才能让风格改变立即生效?

1 个答案:

答案 0 :(得分:1)

以下对我来说很好(在D7中,在Win7 64位上使用IE 11)。

单击Button1后,WebBrowser会按预期右对齐显示“Some text”。后 单击Button2,“某些文本”立即显示居中对齐。希望, 与您的代码并排比较将揭示出与众不同之处。如果以下方法没有帮助,如果您向q添加SSCCE,则可能会得到更好的答案。

HTML

<html>
  <body>
    <div id="adiv" style="text-align: right; color: Gray">Some text</div>
  </body>
</html>

代码

procedure LoadWBFromString(WB : TWebBrowser; AString : String; out Doc2 : IHtmlDocument2);
var
  V : OleVariant;
begin
  WB.Navigate('about:blank');
  Doc2 := WB.Document as IHTMLDocument2;
  Doc2.clear;

  V := VarArrayCreate([0, 0], varVariant);
  V[0] := AString;
  try
    Doc2.Write(PSafeArray(TVarData(v).VArray));
  finally
    Doc2.Close;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Doc2 := Nil;
  LoadWBFromString(WebBrowser1, Memo1.Lines.Text, Doc2);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  E : IHtmlElement;
  Doc3 : IHtmlDocument3;
  S : String;
begin
  Doc2.QueryInterface(IHtmlDocument3, Doc3);
  Assert(Doc3 <> Nil);
  E := Doc3.GetElementByID('adiv');
  if E <> Nil then begin
    E.Style.SetAttribute('text-align', 'center', 0);
    S := E.Style.GetAttribute('text-align', 0);
    Caption := S;
  end;
end;

更新:在WinXP上使用IE6的评论中提到的OP。我试过代码 安装了IE8的WinXP VM并获得了OP描述的行为。打电话后 SetAttribute,“text-align:center”被添加为样式的最后一个属性 并没有采取行动,文本保持右对齐(和原始 大写的“text-align:right”出现在样式属性列表的开头。)

但是,以下更改导致文本按照需要居中。

  if E <> Nil then begin
    E.style.set_textalign('center');
//    E.style.setAttribute('text-align', 'center', 0);
//    S := E.Style.GetAttribute('text-align', 0);
//    Caption := S;
    Memo2.Lines.Text := Doc2.body.OuterHtml;
  end;

(我删除了代码以获取并使用text-align属性,因为 GetAttribute在WinXP / IE8上引发了异常。)

据推测,有人会了解IE的DOM和渲染历史的细节 可以解释IE11和IE6 / 8的行为之间存在这种差异的原因。