我使用webbrowser控件浏览某网页,但如果打开失败或者无法连接服务器时,就会显示:此程序无法显示网页......
我不想webbrowser显示这个提示,想先检测一下网页是否能够打开,或者当失败时跳到自己本地的出错提示页或者图片,该如何判断?
我不想webbrowser显示这个提示,想先检测一下网页是否能够打开,或者当失败时跳到自己本地的出错提示页或者图片,该如何判断?
解决方案 »
- 如何取指针里面的数据?
- comboboxex响应回车,失去焦点问题
- 如何把编码iso-8859-1的转换为gb2312
- 哪位高手知道怎样根据给定的WAV文件画出波形图???帮帮忙啊,谢谢了!
- 大家帮帮我好吗?
- 征集团队方针口号
- 简单的数据库问题,急!,马上散分!
- 请指教一下下面DBgridEh输出到execl哪里有误?
- 在做WORD处理时,如何才能用".EDITGOTO"语句?请给出详细的代码。
- 为什么装过东方影都后mediaplayer控件老是出错(东方影都真是垃圾一堆)?
- SetWindowPos不起作用原因
- cxGrid日期单元格选择日期时出现Invalid Floating Point Operation错误
procedure Navigate(const URL: WideString; var Flags: OleVariant; var TargetFrameName: OleVariant); overload;
procedure Navigate(const URL: WideString; var Flags: OleVariant;
var TargetFrameName: OleVariant; var PostData: OleVariant); overload;
procedure Navigate(const URL: WideString; var Flags: OleVariant;
var TargetFrameName: OleVariant; var PostData: OleVariant;
var Headers: OleVariant); overload;看下这几个方法怎么用,那些var标识的参数是有用的,我认为Headers是可以知道有没有打开了,Flags那些不知道是什么,找找看有没有demo
我也弄不明白这些方法是怎么用的,都是些参数,navigate命令没有返回值,也不会触发异常,所以不好判断网页是否能打开。
to:chinawcs 您是说从程序里先ping一下?这只能保证网络能通,还是没办法保证网页能正常打开的,而且在页面间跳转的时候,我不能每次刷新的时候都ping一下吧。
uses MSHTML;
procedure TForm1.wb1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
ShowMessage(IHtmlDocument2(wb1.Document).title);
end;
这个标题是不是和ie版本有关呀,我这么写了下试试,在我的电脑是可行的,就是不知道到别的电脑上还行不行。谢谢!
if (Pos('导航已取消', wb.OleObject.document.title) > 0) or (Pos('无法显示', wb.OleObject.document.title) > 0) then
begin
......
end;
IHtmlDocument2(wb1.Document).url
或者你判断url,看看是不是更通用些。
procedure Button1Click(Sender: TObject);
var
http : TIdHttp;
url : string;
code : integer;
begin
url := 'http://www.WEBSITE.com';
http := TIdHTTP.Create(nil);
try
try
http.Head(url);
code := http.ResponseCode;
except
on E: EIdHTTPProtocolException do
code := http.ResponseCode;
end;
ShowMessage(IntToStr(code));
finally
http.Free();
end;
end; 这个ResponseCode返回200就是OK,具体代码表示什么你可以搜索http头状态码,你先判断OK了再用webbrower去打开页面,或者你能找到webbrower取http头的方法也可以,我也不知道可不可以。
function TForm1.CheckInternetOnline: Boolean; // 检查互联网是否在线
var
ConnectState: DWORD;
StateSize: DWORD;
begin
ConnectState := 0;
StateSize := sizeof(ConnectState);
Result := false;
// Use WinInet.pas;
if InternetQueryOption(nil, INTERNET_OPTION_CONNECTED_STATE, @ConnectState,
StateSize) then
Result := (ConnectState and INTERNET_STATE_DISCONNECTED) <> 2;
if Result then
Result := InternetCheckConnection('http://www.baidu.com', 1, 0);
end;
把里面的网址 换成你要访问的 地址
TO12# chinawcs 这个方法不错,单独在按钮单击事件里执行是不错的。可是放在webbrowser控件的wbBeforeNavigate2事件中,会报错溢出,放在wbDocumentComplete事件中,都会导致程序无响应。这个检测应该放在哪里呢?