如何高效检测Delphi TWebBrowser网页自上次显示后的变化?

2026-04-10 02:291阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计577个文字,预计阅读时间需要3分钟。

如何高效检测Delphi TWebBrowser网页自上次显示后的变化?

我想在表格中使用Deplhi TWebBrowser显示新闻页面。新闻页面是一个简单的HTML页面,我们不时常上传到我们的网站,可能来自各种工具输出。显示效果很好,但我想在我的应用程序中知道自上次以来有多少条新新闻。

我想使用Deplhi TWebBrowser在表单中显示“新闻”页面.新闻页面是一个简单的 HTML页面,我们不时上传到我们的网站,可能会从各种工具输出.显示很好但我想在我的应用程序中知道自从我上次显示它以来它是否已经改变,所以理想情况下我想要获得其修改日期/时间或其大小/校验和.精度并不重要,理想情况下不应该依赖可能失败的属性,因为“简单”工具用于编辑HTML文件,如NotePad.检查网上有几个文件修改过的 java调用,但我真的不知道从哪里开始.我查看了Delphi的Winapi.WinInet单元中的大量调用,我看到我可以使用HTTP获取文件来检查它,但这似乎是用大锤敲碎核桃.我也看不到任何文件日期时间功能,这让我觉得我错过了一些明显的东西.我正在使用Delphi XE5.我应该朝哪个方向看?谢谢你的任何指示. 您可以使用Indy TIdHTTP发送HEAD请求并检查Last-Modified / Content-Length标头.

如何高效检测Delphi TWebBrowser网页自上次显示后的变化?

例如.:

procedure TForm1.Button1Click(Sender: TObject); var Url: string; Http: TIdHTTP; LastModified: TDateTime; ContentLength: Integer; begin Url := 'yoursite.com/newspage.html'; Http := TIdHTTP.Create(nil); try Http.Head(Url); LastModified := Http.Response.LastModified; ContentLength := Http.Response.ContentLength; ShowMessage(Format('Last-Modified: %s ; Content-Length: %d', [DateTimeToStr(LastModified), ContentLength])); finally Http.Free; end; end;

触发TWebBrowser.DocumentComplete事件时,发出HEAD请求并存储LastModified和ContentLength变量.
然后定期发出HEAD请求以测试更改(例如通过TTimer).

这些Header参数取决于Web服务器实现,并且可能不会在服务器上返回文件系统日期时间(例如,动态页面).您的服务器可能根本不会返回这些参数.

例如,对于IIS上的静态HTML页面,Last-Modified将返回文件系统上次修改日期时间,这是您想要的.

对于动态内容(例如php,asp,.NET等),如果你控制web服务器,你也可以在服务器端添加你自己的自定义HTTP响应头来指示文件系统的日期时间(例如X -Last-Modified)或根据需要设置响应Last-Modified标头,并在客户端检查此标头.

如果需要检查/散列整个HTTP内容,则需要发出GET方法:http.Get(URL)

本文共计577个文字,预计阅读时间需要3分钟。

如何高效检测Delphi TWebBrowser网页自上次显示后的变化?

我想在表格中使用Deplhi TWebBrowser显示新闻页面。新闻页面是一个简单的HTML页面,我们不时常上传到我们的网站,可能来自各种工具输出。显示效果很好,但我想在我的应用程序中知道自上次以来有多少条新新闻。

我想使用Deplhi TWebBrowser在表单中显示“新闻”页面.新闻页面是一个简单的 HTML页面,我们不时上传到我们的网站,可能会从各种工具输出.显示很好但我想在我的应用程序中知道自从我上次显示它以来它是否已经改变,所以理想情况下我想要获得其修改日期/时间或其大小/校验和.精度并不重要,理想情况下不应该依赖可能失败的属性,因为“简单”工具用于编辑HTML文件,如NotePad.检查网上有几个文件修改过的 java调用,但我真的不知道从哪里开始.我查看了Delphi的Winapi.WinInet单元中的大量调用,我看到我可以使用HTTP获取文件来检查它,但这似乎是用大锤敲碎核桃.我也看不到任何文件日期时间功能,这让我觉得我错过了一些明显的东西.我正在使用Delphi XE5.我应该朝哪个方向看?谢谢你的任何指示. 您可以使用Indy TIdHTTP发送HEAD请求并检查Last-Modified / Content-Length标头.

如何高效检测Delphi TWebBrowser网页自上次显示后的变化?

例如.:

procedure TForm1.Button1Click(Sender: TObject); var Url: string; Http: TIdHTTP; LastModified: TDateTime; ContentLength: Integer; begin Url := 'yoursite.com/newspage.html'; Http := TIdHTTP.Create(nil); try Http.Head(Url); LastModified := Http.Response.LastModified; ContentLength := Http.Response.ContentLength; ShowMessage(Format('Last-Modified: %s ; Content-Length: %d', [DateTimeToStr(LastModified), ContentLength])); finally Http.Free; end; end;

触发TWebBrowser.DocumentComplete事件时,发出HEAD请求并存储LastModified和ContentLength变量.
然后定期发出HEAD请求以测试更改(例如通过TTimer).

这些Header参数取决于Web服务器实现,并且可能不会在服务器上返回文件系统日期时间(例如,动态页面).您的服务器可能根本不会返回这些参数.

例如,对于IIS上的静态HTML页面,Last-Modified将返回文件系统上次修改日期时间,这是您想要的.

对于动态内容(例如php,asp,.NET等),如果你控制web服务器,你也可以在服务器端添加你自己的自定义HTTP响应头来指示文件系统的日期时间(例如X -Last-Modified)或根据需要设置响应Last-Modified标头,并在客户端检查此标头.

如果需要检查/散列整个HTTP内容,则需要发出GET方法:http.Get(URL)