線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3932
推到 Plurk!
推到 Facebook!

關於TCppWebBrowser::Refresh2函式使用方式

答題得分者是:pcboy2
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-01-10 15:16:15 IP:203.75.xxx.xxx 未訂閱
不好意思,小弟不才,最近在研究cppwebbrowser的這個元件,元件中有refresh和refresh2這兩個函式,我先是使用refresh(),但是因為我要求每1.5秒做一次(使用timer元件自動重跑),但有時會捉到ie快取內的網頁。
所以才想到要用refresh2()這個函式,可是看bcb內的說明看半天,還是看不懂它應該如何使用,但這個函式的目的就是可以強制刷新網頁,但是它要求的參數我不知該如何給它,還請各位有興趣研究的同好一起幫忙了解一下,先謝謝各位了!
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-01-11 08:13:42 IP:61.219.xxx.xxx 未訂閱
Reloads the current document if necessary.
Delphi syntax:
procedure Refresh2; overload;
procedure Refresh2(var Level: OleVariant); overload;
Description
Call Refresh2 to reload the current document. Unlike the Refresh method, Refresh2 lets you specify what level of refresh to perform.
Level indicates what type of information is refreshed. The following table lists the possible values:
REFRESH_NORMAL 0 Perform a lightweight refresh that does not include the pragma:nocache header. The pragma:nocache header tells the server not to return a cached copy. This can cause problems with some servers.
REFRESH_IFEXPIRED 1 Only refresh if the page has expired. Do not include the pragma:nocache header.
REFRESH_CONTINUE 2 For internal use only.
REFRESH_COMPLETELY 3 Perform a full refresh, including the pragma:nocache header. Using this option is the same as calling the Refresh method.
-----------------------
您有所誤會了
refresh2 是可以設定更新程度, 降低網路資料傳輸
HTML 語法有一個標籤屬性是 nocache, 表示這個網頁不要被 Proxy 或 IE 快取住, 每次都傳回最新資料
REFRESH_NORMAL 只做一點點更新, 不包含 nocache 的 (也就是網頁就算宣告成 nocache, 也不要傳回最新資料)
REFRESH_IFEXPIRED 只更新過期的網頁 (網頁可以設定何時過期), 不包含 nocache 的 (也就是網頁就算宣告成 nocache, 也不要傳回最新資料)
REFRESH_CONTINUE 只更新內部的 (區域網路, 例如存取自己公司的 Web Server)
REFRESH_COMPLETELY 預設值, 做完整更新, 此時 Refresh2 相當於 Refresh

所以如果你要顯示的快, 不再乎抓 cache 的網頁, 用 Refresh2 搭低數值參數
如果您一定要抓最新的資料, 不在乎抓取時間, 用 Refresh2 搭高數值參數或直接用 Refresh

1.5 秒更新太頻繁了, 網頁還沒顯示完成你就要求更新
換一種做法, 如果 Web Server 是你管的, 網頁是你寫的, 把網頁設定成 nocache, 永遠會抓到最新的
( 除非你的 Client 是透過 Proxy 去瀏覽網頁可能就沒辦法, 因為 Proxy 去瀏覽時候會更新,
但是 Proxy 自己有該網頁時候, 可能直接將舊網頁回傳 client , 不去 Web Server 抓新網頁)

------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-01-11 09:24:41 IP:203.75.xxx.xxx 未訂閱

謝謝pcboy2兄詳盡的解答,已經完全了解refresh2的功用
但web server並不是自已控管的…… Orz
再請教一下,關於timer2的問題,我明明將timer的再啟動時間改為5秒,但時間一到,cppwebbrowser元件還是抓到相同的頁面…
有函式可以強制清除網頁快取嗎?
我設計的程式是在系統列作業(就像是msn在右下角的小圖),功能:當如果載入不到這個頁面的時候會自動跳出無此頁面訊息。
但是怎麼樣都無法出現。
必須先將程式從系統列叫出來,cppwebbrowser才會捉到正確的頁面(程式從timer2跳出來跑from建立的源碼後再回到timer2)…
不知道這樣說您是否看得懂…
再麻煩您幫忙看一下。
===================引 用 文 章===================

<-述刪->
-----------------------
您有所誤會了
refresh2 是可以設定更新程度, 降低網路資料傳輸
HTML 語法有一個標籤屬性是 nocache, 表示這個網頁不要被 Proxy 或 IE 快取住, 每次都傳回最新資料
REFRESH_NORMAL 只做一點點更新, 不包含 nocache 的 (也就是網頁就算宣告成 nocache, 也不要傳回最新資料)
REFRESH_IFEXPIRED 只更新過期的網頁 (網頁可以設定何時過期), 不包含 nocache 的 (也就是網頁就算宣告成 nocache, 也不要傳回最新資料)
REFRESH_CONTINUE 只更新內部的 (區域網路, 例如存取自己公司的 Web Server)
REFRESH_COMPLETELY 預設值, 做完整更新, 此時 Refresh2 相當於 Refresh

所以如果你要顯示的快, 不再乎抓 cache 的網頁, 用 Refresh2 搭低數值參數
如果您一定要抓最新的資料, 不在乎抓取時間, 用 Refresh2 搭高數值參數或直接用 Refresh

1.5 秒更新太頻繁了, 網頁還沒顯示完成你就要求更新
換一種做法, 如果 Web Server 是你管的, 網頁是你寫的, 把網頁設定成 nocache, 永遠會抓到最新的
( 除非你的 Client 是透過 Proxy 去瀏覽網頁可能就沒辦法, 因為 Proxy 去瀏覽時候會更新,
但是 Proxy 自己有該網頁時候, 可能直接將舊網頁回傳 client , 不去 Web Server 抓新網頁)

pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-01-11 12:53:53 IP:61.219.xxx.xxx 未訂閱
> 但時間一到,cppwebbrowser元件還是抓到相同的頁面…
5 秒太短了, 如果對方網站很忙碌, 資料可能還沒回傳
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-01-11 13:14:21 IP:220.130.xxx.xxx 訂閱
通常Server端的Serivce是可以控制讀取Header的時間,
如果Server端的app(不管是apache, iis還是其它的web server or service)有implement的話,
那麼只要app抓到request的時間跟system的時間比對過短,或者是認為未達到更新的時間
就會請client reload自己的page

可能會有這樣的問題存在

ps:忘了說,你可以檢查傳回來的http response看一下是什麼結果可能會知道為什麼沒有更新
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-01-11 14:45:30 IP:61.219.xxx.xxx 未訂閱
換一種做法, 如果 Web Server 是你管的, 網頁是你寫的, 把網頁設定成 nocache, 永遠會抓到最新的
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-01-12 09:00:32 IP:203.75.xxx.xxx 未訂閱
不好意思…我的web server是一台無線的hub,沒有提供這樣的服務說…
refresh及refresh2的功能似乎與實際上用手動按f5有一點差異…Orz
謝謝諸位賢達詳盡的解說
結論…cppwebbrowser的相關資訊真少… Orz
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-01-12 09:56:01 IP:61.219.xxx.xxx 未訂閱
> 無線的hub
Hub 有 Web Server ??? 網管型的 HUB ? IP 分享器 ? 廠牌 ? 型號 ?
F5 應該是相當於 Refresh
網路上有關 WebBrowser 的資訊很多
用 Google 去找 Webbrowser1 有 71,700 項
用 Google 去找 BCB Webbrowser1 有 532 項
您的 Client 和 Web Server 是在同一網段上嗎 ?
小弟不清楚您的實際操作和用途
可能您在更新網頁資料時候, 資料尚未更新寫入完成, 程式就要求更新網頁, 當然會讀取到舊資料
(會希望每 1.5 秒 or 5 秒就更新網頁的想法就有點怪, 該網頁是否可以 100% 保證 5 秒內顯示和傳輸完成 ?)
建議您再思考工作流程, 和您真正需要的程式和做法
您要的程式基本上就是 Refresh 沒錯

------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-01-12 10:00:09 IP:220.130.xxx.xxx 訂閱
我想你應該是想要作AP的fw statics吧..:P
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-01-13 10:39:02 IP:203.75.xxx.xxx 未訂閱
>Hub 有 Web Server ???? 網管型的 HUB ? IP 分享器 ? 廠牌 ? 型號 ?
是一台工程用的無線hub,有收費機制。
>F5 應該是相當於 Refresh
目前的文件顯示的內容的確是同等這樣的功能,但是實際上在使用的時候卻達不到我所需要的要求,會是因為在背景作業的關係嗎?
我嘗試過在refresh後的下一行設中斷點,不論我等多久,refresh後都還是捉到相同的網頁內容…
>您的 Client 和 Web Server 是在同一網段上嗎 ?
是的,是在同一網段。
>小弟不清楚您的實際操作和用途
實際運用是在背景判斷使用者是否有做無線網路登入的動作,如果是在未登入的狀態,則開啟ie視窗(呼叫internet explorer)進入登入頁面。
>可能您在更新網頁資料時候, 資料尚未更新寫入完成, 程式就要求更新網頁, 當然會讀取到舊資料
>(會希望每 1.5 秒 or 5 秒就更新網頁的想法就有點怪, 該網頁是否可以 100% 保證 5 秒內顯示和傳輸完成 ?)
我就算等了一分鐘,也是抓到相同的網頁…(無言)
>建議您再思考工作流程, 和您真正需要的程式和做法
其實,是有其他的方式:
1.利用cppwebbrowser->navigate的參數來變更,他的"flag"可設定1.2.4.8.16的值但如果我要4及8的功能,是不是可以直接加起來填入12呢?實際上在使用的時候卻感覺毫無效果…
2.使用ping方法,在api中,有InternetCheckConnection這個函式,但http://www.google.com卻也可以解析的到…但真的在連線的時候會被無線AP導到登入頁面去。不知是否還有其他函式可以運用?
3.程式在執行的時候,每在背景比對完網頁之後就直接刪除CPPWEBBROWSER元件,等下次要NAVIGATE時再重建一次CPPWEBBROWSER,但不知道該如何寫這段程式…有同好能指導一下嗎?
>您要的程式基本上就是 Refresh 沒錯
謝謝您的解說。
系統時間:2024-04-26 8:42:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!