1

Тема: VBScript: Понять бы мне работу обьекта InternetExplorer

Всем привет!
Прошу подсказки в понимании событий обьекта InternetExplorer.
Юзаю условную страницу page.php через ИЕ на которой, в теге БОДИ есть тег СКРИПТ в котором стартует таймер setInterval() без ID.
Решил своими силами избавиться от таймера применив следующий ниже код. Код сработал но таймер не остановился .
Такой вывод что таймер стартанул ещё при первом событии DownloadComplete. Но событие DownloadComplete не имеет аргумента pDisp что-бы "добраться" до innerHTML тега БОДИ .
Есть ли тут выход, подскажите плиз!

И ещё заметил что при загрузки страницы наступают события в непонятной для меня последовательности, т.е.
BeforeNavigate2
DownloadBegin
DownloadComplete
DownloadBegin
NavigateComplete2
DownloadComplete
DocumentComplete
почему DownloadBegin и DownloadComplete наступают 2 раза?

Поверьте, искал в сети инфу, но доходчивого описания событий не нашёл .


dim IE
Set IE = New IEClass
IE.Application.Visible = True
IE.Application.Navigate "page.php"

Sub IE_BeforeNavigate2(pDisp, url, Flags, TargetFrameName, PostData, Headers, Cancel)
End Sub

Sub IE_DownloadBegin()
End Sub

Sub IE_DownloadComplete()
End Sub

Sub IE_NavigateComplete2(pDisp, URL)
    set a=pDisp.Document
    set b=a.parentWindow
    set c=b.document.all.tags("body")(0)
    d=c.innerHTML
    'тут с помощью строковых функций "вырезаю" ненужный кусок кода
    c.innerHTML=d
End Sub

Sub IE_DocumentComplete(pDisp, URL)
End Sub

Sub IE_OnQuit()
    Wscript.Quit
End Sub

Class IEClass
    Public Application
    Private Sub Class_Initialize
        Set Application = WScript.CreateObject("InternetExplorer.Application", "IE_")
    End Sub
    Sub Class_Terminate
        Do
            WScript.Sleep 10
        Loop Until Application = ""
    End Sub
End Class

2 (изменено: wisgest, 2012-12-21 14:22:11)

Re: VBScript: Понять бы мне работу обьекта InternetExplorer

hhelper97 пишет:

Такой вывод что таймер стартанул ещё при первом событии DownloadComplete

Насколько я вижу, при первом DownloadComplete еще не доступен Document, но при втором будет поздно: ежели <SCRIPT> доступен через .innerHTML, то более чем вероятно, что он уже запущен на исполнение; да и вырезать через перезапись .innerHTML не стоит — при этом можно потерять ссылки на элеметы.

Если устроит, то можно попробовать отключить .setInterval() на странице напрочь, например, заменив функцией-заглушкой:

Sub IE_DownloadBegin()
    On Error Resume Next
    IE.Application.Document.parentWindow.execScript "this.setInterval = function () {};", "JScript"
    On Error Goto 0
End Sub