Modify ↓
#2711 closed Bug (Works For Me)
_IELoadWait() hung in case of unknown error
Reported by: | anonymous | Owned by: | |
---|---|---|---|
Milestone: | Component: | Standard UDFs | |
Version: | Other | Severity: | None |
Keywords: | Cc: |
Description
I have Embedded IE and sometimes it error-out by showing "404" page not found. In this case _IELoadWait($oIE,0,3333) always hung forever.
It seems it happen because of some logic problem in Func IEComErrorUnrecoverable($i_error) as it return $_IEStatus_Success not only when @error=0, but also in case of all unknown errors.
In my case @error=1 and as result _IELoadWait() didn't check for timer to time-out going in infinite loop.
Select Case __IEIsObjType($o_object, "browser"); Internet Explorer ; ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : String($o_object.readyState) = ' & String($o_object.readyState) & @CRLF & '>Error code: ' & @error & ' Extended code: 0x' & Hex(@extended) & @CRLF) ;### Debug Console While Not (String($o_object.readyState) = "complete" Or $o_object.readyState = 4 Or $f_Abort) ; Trap unrecoverable COM errors If @error Then $i_error = @error If __IEComErrorUnrecoverable($i_error) Then $i_ErrorStatusCode = __IEComErrorUnrecoverable($i_error) $f_Abort = True EndIf ElseIf (TimerDiff($IELoadWaitTimer) > $i_timeout) Then $i_ErrorStatusCode = $_IEStatus_LoadWaitTimeout $f_Abort = True EndIf Sleep(100) WEnd ;---------------------------------------------------------------------------------- Func __IEComErrorUnrecoverable($i_error) Switch $i_error ; Cross-domain scripting security error Case -2147352567 ; "an exception has occurred." Return $_IEStatus_AccessIsDenied Case -2147024891 ; "Access is denied." Return $_IEStatus_AccessIsDenied ; ; Browser object is destroyed before we try to operate upon it Case -2147417848 ; "The object invoked has disconnected from its clients." Return $_IEStatus_ClientDisconnected Case -2147023174 ; "RPC server not accessible." Return $_IEStatus_ClientDisconnected Case -2147023179 ; "The interface is unknown." Return $_IEStatus_ClientDisconnected ; Case Else Return $_IEStatus_Success EndSwitch EndFunc ;==>__IEComErrorUnrecoverable
Attachments (0)
Change History (3)
comment:1 Changed 11 years ago by TicketCleanup
- Version set to Other
comment:2 Changed 10 years ago by guinness
- Resolution set to Works For Me
- Status changed from new to closed
comment:3 Changed 10 years ago by anonymous
why not change it to:
While Not (String($o_object.readyState) = "complete" Or $o_object.readyState = 4 Or $f_Abort) ; Trap unrecoverable COM errors If @error Then $i_error = @error If __IEComErrorUnrecoverable($i_error) Then $i_ErrorStatusCode = __IEComErrorUnrecoverable($i_error) $f_Abort = True EndIf EndIf If (TimerDiff($IELoadWaitTimer) > $i_timeout) Then $i_ErrorStatusCode = $_IEStatus_LoadWaitTimeout $f_Abort = True EndIf Sleep(100) WEnd
here timeout actually work as time out, is't?
Guidelines for posting comments:
- You cannot re-open a ticket but you may still leave a comment if you have additional information to add.
- In-depth discussions should take place on the forum.
For more information see the full version of the ticket guidelines here.
Note: See
TracTickets for help on using
tickets.
Automatic ticket cleanup.