Что нового

Как определить полную загрузку HTML документа

The Dream

Новичок
Сообщения
393
Репутация
3
Уважаемый Garrett, подскажите пожалуйста а статус загрузки страницы, я так понимаю получить невозможно? К примеру, при использовании ф-ции _IELoadWait() - ф-ция всегда возвращает false, то есть будто страница еще грузится, хотя на самом деле уже давно загрузилась.

Спасибо.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
The Dream [?]
а статус загрузки страницы, я так понимаю получить невозможно?

Можно, используйте метод - readyState
Код:
If $oIE.readyState = 4 Then ; Completed - Завершение всех операций.
	ConsoleWrite($oIE.responseText & @CRLF)
EndIf
 
Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3
К сожалению не работает. Вот скрипт (я предложенный вариант также пробовал):

Код:
_IEErrorHandlerRegister()

$aData = _IESCreate()
$oIE = $aData[0]

_IENavigate($oIE,'http://google.com',0)

While 1
	If $oIE.readyState = 4 Then
    MsgBox(16,'',$oIE.responseText)
EndIf
WEnd


Ф-ция:

Код:
Func _IESCreate()

	; Return array: obj, handle

	Local $sBrowser = 'browser.exe', $sTitle = "Internet Explorer Server"
	Local $aECW, $oIE, $aData
	Run($sBrowser)
	WinWait($sTitle)
	Sleep(500)
	$hWnd = WinGetHandle($sTitle)
	If WinSetTitle($sTitle, '', $hWnd) Then
		$aECW = _WinAPI_EnumChildWindows($hWnd)
		$oIE = _IEGetObjServer($aECW)

		If Not @error Then
			If _IENavigate($oIE, 'about:blank') Then
				If _IEPropertySet($oIE, 'innertext', $hWnd) Then
					If _IEPropertyGet($oIE, 'innertext') = $hWnd Then
						Dim $aData[2] = [$oIE, $hWnd]
						Return $aData
					EndIf
				EndIf
			EndIf
		EndIf
	EndIf
						Dim $aData[2] = [False, $hWnd]
						Return $aData

EndFunc   ;==>_IESCreate


Программа:

Код:
#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Compression=4
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ie.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <WindowsConstants.au3>
#include <Encoding.au3>
#include <GuiEdit.au3>
#include <File.au3>
#include <GDIPlus.au3>
#include <GUICtrlHyperLink.au3>
#include <ScreenCapture.au3>
#include <WinAPIEx.au3>
#include <APIConstants.au3>

Opt("GUIResizeMode", $GUI_DOCKALL)

_IEErrorHandlerRegister()

Global $iHeight = @DesktopHeight - 100, $iWidth = @DesktopWidth - 100; ширина

Global $hGui = GUICreate('Internet Explorer Server', $iWidth, $iHeight-4, 50, 20, $WS_SIZEBOX + $WS_SYSMENU)
Global $oIE = _IECreateEmbedded()
Global $iIE = GUICtrlCreateObj($oIE, 0, 0, $iWidth, $iHeight - 40)
Global $sUrlLast
$iProgress = GUICtrlCreateProgress(0, $iHeight - 40, $iWidth - 342, 16)
$iCurrentUrl = GUICtrlCreateLabel('', $iWidth - 340, $iHeight - 40, 340, 16)
GUICtrlSetResizing($iProgress, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
GUICtrlSetResizing($iCurrentUrl, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
GUICtrlSetResizing($iIE, $GUI_DOCKBORDERS)
GUICtrlSetFont($iCurrentUrl, 10, 400, 1, 'georgia')

ObjEvent($oIE, 'IEEvent_', 'DWebBrowserEvents2')
_IENavigate($oIE, 'about:blank')

GUISetState(@SW_SHOW, $hGui)

While 1

	$sUrl = _IEPropertyGet($oIE, 'locationurl')
	If $sUrl <> $sUrlLast Then
		GUICtrlSetData($iCurrentUrl, $sUrl)
		$sUrlLast = $sUrl
	EndIf

	Switch GUIGetMsg($hGui)

		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch

	Sleep(50)
WEnd


Func IEEvent_ProgressChange($i_Progress, $i_ProgressMax)

	If $i_ProgressMax <= 0 Then Return
	$iPercent = ($i_Progress * 100) / $i_ProgressMax
	GUICtrlSetData($iProgress, $iPercent)
	If $iPercent >= 100 Then GUICtrlSetData($iProgress, 0)

EndFunc   ;==>IEEvent_ProgressChange
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Код:
$sBrowser = 'browser.exe'

А где информация? Что за зверь? У меня по телепатии в школе -3 было! :smile:
 
Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
The Dream
Похоже, то, что вы задумали, не будет работать.
А зачем вам собственно городить аналог IE, используёте _IECreateEmbedded в основном скрипте.
 
Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3
Garrett, к сожалению использовать в коде постоянно _IECreateEmbedded приводит к тому, что приложение занимает все больше и больше "места" в оперативной памяти.
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
OffTopic:
есть такое... интересно почему и как это победить :smile:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
The Dream [?]
приводит к тому, что приложение занимает все больше и больше "места" в оперативной памяти.
Приведите пример (код) когда наблюдается это явление.
 
Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3
Garrett Уважаемый (без сарказма), Вы что не в курсе этой проблемы? Вроде бы это довольно известная проблема, что при использовании обьекта IE в скрипте то он со временем все больше и больше потребляет оперативной памяти! Об этом многие знают. Попробуйте создать простой скрипт, где в цыкле к примеру совершается переход на страницу.

Мне казалось это довольно популярное неудобство..
 
Верх