又是 WebBrowser 问题,巨怪异!!!【解决之后再加 100 分】(100分)

  • 主题发起人 主题发起人 dreamfly1024
  • 开始时间 开始时间
D

dreamfly1024

Unregistered / Unconfirmed
GUEST, unregistred user!
用 WebBrowser 控件 Load 一个文字流之后,为何超过一定大小,就自动显示为文本,而不按照 html 来显示呢。
有出过这个问题的来指点一下,谢谢!
 
有长度限制,注意分行,多行就可以了.
 
xeen,
分行了,就是行数太多,才自动显示 html 源码的,而不是实际效果,苦恼中。。。
 
摸有出过这个问题
 
用Document.Write
 
本人尝试过以下几种方案(所以请提出新的思路):
1、document.write
缺点是丢失样式
2、about:
显示不出来
3、生成空框架(比如 table),然后对其 innerHtml 赋值
缺点是烦琐(目前采用的方案)

请大家再提出新的解决方案!

ps:这是微软的一个 bug:http://support.microsoft.com/kb/323569
 
调用下面的函数实现load....
procedure Navigate(html: TStrings; var browser: TWebbrowser);
var
Document: OleVariant;
InStream: TStream;
Persist: IPersistStreamInit; // Declared in ActiveX
begin
if (html <> nil) and (html.count > 0) then
begin
InStream := TStringStream.Create(html.text);
try
if Browser.Document = nil then
browser.Navigate('about:blank');
Persist := (Browser.Document as IPersistStreamInit);
Persist.Load(TStreamAdapter.Create(InStream));
finally
InStream.Free;
end;
end
else
browser.Navigate('about:blank');
end;
调用思路:
list:TStrings;
list.Add('<body>');
.......//写入hmtl
list.Add('</body>');
...
Navigate(list,webbrowser1);
 
IT书生,
就是这么调用的,内容太多的时候,就直接出现 html 源码,而不是解析之后的内容!

你参考一下微软的报告:http://support.microsoft.com/kb/323569
 
用临时文件成么? 先写到文件里,然后再访问
 
再加这个试试:
list.SaveToFile(Apppath + 'Your.html');
WebBrowser.Navigate(Apppath + 'Your.html');
 
同意楼上,方法是土了点,但是实在
加一句:
deeltefile(Apppath + 'Your.html');
 
楼上几位:
微软也推荐采用临时文件的方式处理,但是程序需要发布到用户手中,创建临时文件的方式存在很多风险,比如很多杀毒软件或防火墙等安全软件可能会阻止,从而导致失败。

期待更好的解决方案!
 
这样成不,你发布的程序里边已经有这个文件 比如 aaa.html.
使用的时候重新 读写这个文件就是了,应该不会触发杀毒软件。
另外, 可以使用系统API 得到临时文件:
function GetTemp() :string;
var
szDest : array[0..MAX_PATH] of Char;
begin
GetTempPath(MAX_PATH,szDest);
GetTempFileName(szDest, 'xml', MAX_PATH,szDest);
Result := szDest;
end;
也应该不会出问题吧。
很多软件都在用临时文件的,也没有说有什么问题啊。
 
如果仅仅用临时文件,我就不到这儿来问了,微软早就有建议了(foxmail也是这么干的)。
大家先看看微软的报告再来:http://support.microsoft.com/kb/323569
 
(WebBrowser.Document as IHTMLDocument2).body.outerHTML := '<a href=www.ismmsoft.net>www.ismmsoft.net</a>';
 
e-,
比较奇怪的是,我设置 innerHtml 属性可以,但是 outerHtml 却不可,不知兄台有没有测过?
 
<body><a href=www.ismmsoft.net>ismmsoft</a></body>
以上面的为例:
outerHTML包含全部
innerHTML不包含body标签只有<a href=www.ismmsoft.net>ismmsoft</a>
这样就没问题(WebBrowser.Document as IHTMLDocument2).body.outerHTML := '<body><a href=www.ismmsoft.net>ismmsoft</a></body>';
 
outerHtml 和 innerHtml 的区别当然知道, 但是奇怪的是, 我在设置 outerHtml 的时候, 会出现一个异常: &quot;发生意外&quot;
所以很郁闷, 不知道是怎么回事!
 
咋会都样式呢?
你把样式表先写进去
doucment.clear;
doucment.Write(&quot;
<style>
</>&quot;);
.
.
.
document.close;
 
document.write 是正解!
唉, 原先我所有的方法都试过, 也搜过原先的帖子, 一时粗心, 竟然把样式写错了:(
害我白忙了好多天!

可恶的微软bug! 除了 document.write, 还能想出别的解决办法来, 照样送分!

这边的帖子先结, 另送 iamy 100 分.
 
后退
顶部