急救:使用TWebBrowser时遇到的错误(100分)

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

DouZheng

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TfrmMain.ShowHtml(Browser: TWebBrowser; content: string);
var
vv: Variant;
HTMLDocument: IHTMLDocument2;
begin
vv := VarArrayCreate([0, 0], varVariant);
vv[0] := content;
HTMLDocument := browser.Document as IHTMLDocument2;
HTMLDocument.Write(PSafeArray(TVarData(vv).VArray));
HTMLDocument.charset := 'gb2312';
HTMLDocument.Close;
end;
当TWebBrowser显示file://页面时,比如e:,再运行上面的ShowHtml过程,
这句话:HTMLDocument := browser.Document as IHTMLDocument2;
出现错误:Interface not supported.
怎么解决?
 
我这儿怎么没这个问题呀。

procedure TForm1.Button1Click(Sender: TObject);
var
vv: Variant;
HTMLDocument: IHTMLDocument2;
begin
Browser.Navigate('file://c:/a.htm');
vv := VarArrayCreate([0, 0], varVariant);
vv[0] := 'sdf';
HTMLDocument := browser.Document as IHTMLDocument2;
//HTMLDocument.Write(PSafeArray(TVarData(vv).VArray));
//HTMLDocument.charset := 'gb2312';
//HTMLDocument.Close;
end;
 
to zw84611:
不是这样的:Browser.Navigate('file://c:/a.htm');
我说的是,没有a.htm,只是显示本地硬盘的文件夹中内容,比如:e:/
 
浏览页面与浏览磁盘可能机制不一样吧,在浏览html文件时,可以通过document 得到Ihtmldocument2
接口,但在浏览磁盘如同资源管理器一样是得不到这个接口的.
 
那就对了,你访问的不是网页,访问e:/,实际上是通过OLE使用资源管理器,自然没有这个接口,
你可以在IE里访问e:/,看还有没有编码之类的可用。
 
非常感谢各位的关注,但现在问题是,怎样才能不出现这个错误提示,
并使程序正常运行下去,显示出下一个页面?
 
判断字符串是否是'x:/'
 
就像IE一样,在地址栏输入e:/后,再输入www.sina.com.cn,不会出现这个错误信息。
怎样才能做到?
 
to zw84611:
如果是x:/那么该怎么办?
 
那就exit
不执行

HTMLDocument := browser.Document as IHTMLDocument2;
HTMLDocument.Write(PSafeArray(TVarData(vv).VArray));
HTMLDocument.charset := 'gb2312';
HTMLDocument.Close;

这部分就是了。
 
当然了,我是在地址栏输入e:/后,再调用showhtml这个过程,而不是直接在地址栏输入
新的地址。
 
exit可不行。
HTMLDocument := browser.Document as IHTMLDocument2;
HTMLDocument.Write(PSafeArray(TVarData(vv).VArray));
HTMLDocument.charset := 'gb2312';
HTMLDocument.Close;

这部分,必须得执行。
因为 ,我要显示下一个页面呢
 
to zw84611:
可能是我没说清楚。我要的是:
1.在地址栏或通过web的超链接,显示出本地硬盘文件夹了。
2.调用showhtml过程,再显示另外的web页面。
这是一个正常的步骤。
 
你必须保证web页面加载完毕后再使用HTMLDocument := browser.Document as IHTMLDocument2;
我不知道你的showhtml是什么时候调用的。
 
我的程序是这样的:
有两种方式在twebbrowser中显示内容:
一种(A):在地址栏或通过web的超链接,显示出本地硬盘文件夹了。
另一种(B):执行showhtml显示edit1.text中的内容。
现在问题是,如果总执行B,不会有问题;如果总执行A,也不会有问题;
执行完B,再执行A,也没问题;而执行完A,再执行B,就会出现上面的问题。
怎么办?
 
procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.Navigate('c:/');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
HTMLDocument: IHTMLDocument2;
begin
tag := 0;
WebBrowser1.Navigate('c:/a.htm');
while(tag=0) do Application.ProcessMessages;
HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
tag := 1;
end;
 
to zw84611:
我要调用showhtml来生成并显示出一个页面,而不是已经有a.htm了。
edit1.text作为showhtml的第二个参数content的值。
 
请问IHTMLDocument2是引用哪个单元的阿?
 
SHDocVw_TLB
 
procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.Navigate('c:/');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
vv: Variant;
HTMLDocument: IHTMLDocument2;
begin
tag := 0;
WebBrowser1.Navigate('about:blank');
while(tag=0) do Application.ProcessMessages;
vv := VarArrayCreate([0, 0], varVariant);
vv[0] := 'hello';
HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
HTMLDocument.Write(PSafeArray(TVarData(vv).VArray));
HTMLDocument.charset := 'gb2312';
HTMLDocument.Close;
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
tag := 1;
end;
 
顶部