2012-01-30 76 views
0

我通過輸入javascript:blahblahblah到位置欄,通過autohotkey將JavaScript注入到頁面中。我需要確定IE是否在等待導航到新頁面(例如,頁面狀態正在旋轉,但它尚未刷新到新頁面)。確定瀏覽器是否正在導航 - 沒有onunload

目前我正在使用document.readyState,但是,在遠程Web服務器回覆之前有時會有很長的延遲。在那段延遲期間,readyState仍然說「完整」(因爲它是完整的,它只是舊頁面,而不是新頁面)

如果我嘗試對頁面做些什麼,它會在舊頁面上運行,而不是即將到來的。

每次頁面導航後,我都可以睡幾分鐘,但這會讓腳本永遠消失。

掛鉤onunload不會通過地址欄工作,因爲每次我在地址欄中輸入內容時都會觸發onunload,導致大量的誤報。

有沒有在IE瀏覽器的JavaScript的某種方式來告訴瀏覽器是否正在等待去一個新的頁面?

回答

1

真巧,我只是四處尋找同樣的問題,我用readyState的,面對你的問題,我在發現了類似的事件處理程序VB喜歡你也嘗試使用,但如你所說它會在每次觸發事件時執行。

溶膠: 我在MSDN擡頭,發現財產得到一個值,指出對象是否是一家從事導航或下載操作,現在我用它除了 readyState的,則忙碌用於等待遠程服務器回覆,並且準備好狀態用於使對象準備好採取動作。

通知:我試圖單獨使用繁忙,但有些時候回覆太快,下一條指令試圖在對象準備好之前執行。

實例AHK(測試登錄頁面,高倍率20倍):

Loop, 20 
{ 
Global IE := ComObjCreate("InternetExplorer.Application") 
IE.visible := 1 
IE.Silent := 0 
Login: 
IE.navigate("www.example.com") 
While (IE.ReadyState != 4 or IE.Busy = True) 
continue 

IE.document.forms("login").name.value := "Username" 
IE.document.forms("login").password.value := "Password" 
;IE.document.forms("login").s1.Click() 
IE.document.forms("login").Submit() 
While (IE.ReadyState != 4 or IE.Busy = True) 
continue 

;sleep 1000 ;use it just to see that you are login successfully 
IE.Stop() 
IE.Quit() 
} 
+0

堆棧溢出又一次一天撲救。謝謝! – 2012-04-25 20:08:49

相關問題