はじめまして、お世話になります。
TWebBrowserにて、Navigate()して取得したドキュメント(xxx.html)の作成日時/更新日時とサイズを取得したいのですが、方法がわかりません。
どうすれば良いでしょうか。
ブラウザでは、HTML等のサーバー側のドキュメントの作成日等は通常取れません。
こんなものが取れたら、セキュリティ面に問題があると言うことに
なります。
ブラウザはサーバーから受信したHTMLドキュメントを解析して
表示するだけです。(実際は細かい処理を行いますが)
>TWebBrowserにて
TWebBrowserではなく、IndyのTIdHttpでよければ、
INDY http TIPS
http://www.monazilla.org/document/indytips.html
の
指定コンテンツのサイズを取得する
指定コンテンツの最終更新日を取得する
あたりで、サイズ・最終更新日が取得できそうですが・・・
恐らく更新日時とサイズはIHTMLDocument2経由で取得できると思うのですが、
更新日時が取得できるのはサーバーがLast-Modifiedを返した場合だけだと思います。
igy さん
それだと、二重にアクセスしなければならないので、なんとかTWebBrowser経由で取得できればと思っています。
通りすがり さん
ぐぐっていたら、MSHTMLのInterfacesというのを使えばいろいろな情報を取得できるというのは、だんだんわかってきたのですが、Interfacesが大量に存在していて、どれを使えばいいのか不明でした。
IHTMLDocument2を調べてみます。
とりあえずこれで
procedure TForm10.WebBrowser1NavigateComplete2(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
IDOC: IHTMLDocument2;
WS: WideString;
begin
with TWebBrowser(ASender) do
begin
ControlInterface.Document.QueryInterface(IID_IHTMLDocument, iDoc);
if Assigned(iDoc) then
begin
Memo1.Lines.Add(IDoc.lastModified);
try
Memo1.Lines.Add ('Created Date : ' + IDoc.fileCreatedDate);
Memo1.Lines.Add ('Modified Date : ' + IDoc.fileModifiedDate);
Memo1.Lines.Add ('Updated Date : ' + IDOC.fileUpdatedDate);
Memo1.Lines.Add ('FileSize:' + IDoc.fileSize);
finally
end;
end;
end;
end;
Last-Modified 今の時刻を返すから IHTMLDocument2 の更新時間って所か?
Yahoo は日付取得不可 (IE上でプロパティからも見えない)
多くのWEBサイトはドキュメント(xxx.html)のヘッダにLast-Modifiedを
含めていないから、作成日時/更新日時の取得はあきらめたほうがいいよ。
Last-ModifiedはHTTPレスポンスのヘッダに含まれる情報です。
これが返されるケースが多いか少ないかは別として、
HTTPの仕様とHTMLの仕様は別なので、誤った情報は書かないでください。
>多くのWEBサイトはドキュメント(xxx.html)のヘッダにLast-Modifiedを
>含めていないから、作成日時/更新日時の取得はあきらめたほうがいいよ。
これはHTMLファイルの<head>〜</head>のことを言ってるのではなくて、
HTTPレスポンスのヘッダのことを言ってるのだと思う。
IndyのResponse.LastModifiedもIHTMLDocument2のlastModifiedも
レスポンスのヘッダのLast-Modifiedから情報を取得してるだけで、
Last-Modifiedが含まれていなければ初期値か現在時刻を返すだけ。
皆様どうもありがとうございます。
KHE00221 さん具体例さんすくです。
IHTMLDocument2の
fileCreatedDate
fileModifiedDate
fileUpdatedDate
fileSize
lastModified
等を取得することで日付やサイズを得ることが出来ました。
ちなみに、試したサイトではちゃんとLast-Modifiedを返してくれました。
ツイート | ![]() |