WinXP+D7環境です。Navigateメソッドで指定URLにジャンプするとき、開発環境のXP+IE8ではキャッシュを読まずに
新規にサイトを読み込んで表示するようですが、できあがったEXEをXP+IE7の環境に持って行くとキャッシュを
読み込んでしまい、表示が更新されません。
その場合でも、IEのオプションでキャッシュを読まない設定にすればそのように動作しますが。
Navigateメソッドの第2引数にnavNoReadFromCacheを指定する、と言うのも全く効果がありません。
これに関しては http://msdn.microsoft.com/en-us/library/dd565688 でもNot implementedと言うことで、使えないのだと思います。
試しに
WebBrowser1.Navigate(URL);
while WebBrowser1.ReadyState < READYSTATE_COMPLETE do
Application.Processmessages;
WebBrowser1.Refresh;
while WebBrowser1.ReadyState < READYSTATE_COMPLETE do
Application.Processmessages;
WebBrowser1.Navigate(URL);
while WebBrowser.ReadyState < READYSTATE_COMPLETE do
Application.Processmessages;
このようにしても、更新が完了する前にREADYSTATEがREADYSTATE_COMPLETEになるようで、キャッシュが
更新される前にNavigateしてしまい、結果更新していないページが表示されます。
何か回避する手はないでしょうか。IEのオプションを書き換える、と言う手も検討していますが…。
Refresh2を利用できないでしょうか。
読み込む階層を指定できますが。
最近忙しくて中々書き込めませんが、
DeleteUrlCacheEntry(aURL); //uses wininet
WebBrowser1.Navigate(aURL);
これで私の方は更新反映できました。
もしかしたら さん、monaaさん、ありがとうございます。
キャッシュを読ませたくないならば削除してしまえばよい、というのは私も思いつきまして只今テスト中です。
現在の所3つ問題がありまして、
(1) アドレスとエントリー名が一致しない場合がある
Googleの場合エントリー名もhttp://www.google.co.jp/なのですが、http://www.yahoo.co.jp/にアクセスした場合、
キャッシュに残るエントリー名はhttp://www.yahoo.co.jp/javascript/fp_base_bd_ga_4.3.6.jsのようで、
単純にURL名をキャストして渡しても消せない。
(2) エントリーを削除しても、画像キャッシュは再使用される
チェックしたいのはその画像の方でして。そのURLに関係するキャッシュ全てを探し出して削除する必要があるようです。
(3)ディスクアクセスの関係か、まれにキャッシュを読み込む
ちなみに、キャッシュを残さないようにと思い、
WebBrowser1.Navigate(sURL);
if DeleteUrlCacheEntry(pChar(sURL)) = True then
Showmessage('Deleted!')
else
Showmessage('NoCacheFile');
こうしても'NoCacheFile'が返ってきます。時間をおいて別のボタンイベントでDeleteUrlCacheEntryすれば当然削除できるのですが。
ディスクアクセスが間に合わないようです。
チェックしたいのは Yahooのページ内にある画像なの?
Yahooのページはレスポンスヘッダが次のようになってるから、ページのソースはキャッシュには残らないよ。つまりキャッシュを消す必要もないということ。
Cache-Control: no-cache
Cache-Control: no-store, must-revalidate
Expires: -1
Pragma: no-cache
画像をチェックしたいのなら、WEBページでなく直接その画像を読み込んで
調べるべきでしょう。
チュックする画像というのは、画像が変わればそのURLも変わるの?
ん?さん、ありがとうございます。Yahooというのは一つの例と言う意味で、目的のサイトではありません。
言葉足らずでした。
しかし、キャッシュに残らないというのは大変貴重なアドバイスで、参考にさせて頂きます。
目的のサイトの画像は、日付や顧客番号などをパラメーターとして渡して、その計算結果のグラフが画像化されて
表示されていて、これまで見たところでは、日付や表示サイズらしきものもURLに含まれていて、
URLの保証が期待できないのです。
TWebBrowser 互換のフリーのTEmbeddedWBを使えば
http://www.bsalsa.com/index.html
小生の場合キャッシュから読み読まないのボタンがチェック状態なら
Navigateする前にキャッシュを読まないようプロパティをセットをして
if Form1.Chash1.Checked then
EmbeddedWB1.DownloadOptions:=EmbeddedWB1.DownloadOptions - [DownloadAndIgnoreCache]
else
EmbeddedWB1.DownloadOptions:=EmbeddedWB1.DownloadOptions + [DownloadAndIgnoreCache];
のように DownloadOptionsをtrueにしてからNavigateするようにしています。
英語なので正確にはわかりませんが、そのように理解して使っています。
TWebBrowser と完全互換ですから、ばっさり入れ替えるだけで動きます。
スクリプトエラーストップだけ違うようですがよりわかりやすいです。
インターネットオプションもHomePageもブラウザ画面のポップアップも
IEと共用ですから
Irvineなど追加インストールメニューもIEと同じで使えます。
ものすごい高性能ブラウザコンポなのに
変に独自性を表に出さないので使いやすいです。
はずしていたらごめんください。
>EmbeddedWB1.DownloadOptions:=EmbeddedWB1.DownloadOptions + [DownloadAndIgnoreCache];
>のように DownloadOptionsをtrueにしてからNavigateするようにしています。
↑これは、Navigateする際にリクエストヘッダに
Cache-Control: no-cache
の行を追加することと同じであると確認しました。
しかし、そうしてもキャッシュ(インターネット一時ファイル)が存在すると
サーバーにアクセスしないでキャッシュから読み込んでしまいますね。
確実にサーバーから読み込んで更新するには、やはりキャッシュを
削除しないとダメのようです。
武田さん、「""$"!! 」さん、ありがとうございます。
最初に「IEのオプションでキャッシュを読まない設定にすればそのように動作しますが。」と書きましたが、
どうも旨く動作しないXP+IE7環境では、画像キャッシュはオプションに関係なく、使用されてしまうようです。
キャッシュオプションを指定しているレジストリを一時的に変更することも試してみましたが、やはり
タイミングの問題でブラウザに旨く設定が反映されなかったりしますし、管理権限の問題もありますし、
その方法は没にしました。
と言うことで、現在はキャッシュをばっさり削除すると言う方法を取り入れて旨く動作しています。
かなり迷惑な動作ですね。(^-^;)
この件に関しては、こちらでも良くアドバイスされているMr.XRAYさんのライブラリを参考にさせて頂きました。
皆さん、ありがとうございます。
ツイート | ![]() |