1 (изменено: no-coder, 2015-11-22 12:50:40)

Тема: VBS: setInterval не работает

dim p
Set p=New pClass
p.Application.visible=true
p.Application.Navigate "http://site.com"

SUB p_DocumentComplete(pDisp,URL)
	if p.Application.LocationURL <> URL Then 
		p.Application.StatusText="not loaded..."
		Exit Sub
	end if
END SUB

do while p.application.busy
loop

p.application.document.parentWindow.setInterval f(),1000,"vbscript"

function f()
	p.application.document.title=time
end function

Sub p_OnQuit()
	Wscript.Quit
End Sub
Class pClass
	Public Application
	Private Sub Class_Initialize
		Set Application = WScript.CreateObject("InternetExplorer.Application","p_")
	End Sub
	Sub Class_Terminate
		Do
			WScript.Sleep 10
		Loop Until Application = ""
	End Sub
End Class

Функция f() срабатывает один раз и выскакивает ошибка Windows Script Host "Недопустимый аргумент".
Пробовал следующее...

p.application.document.parentWindow.setInterval "f()",1000,"vbscript"

выскакивает ошибка Internet Explorer "Несоответствие типа: 'f'"

в чём моя ошибка?

2 (изменено: wisgest, 2015-11-24 03:00:37)

Re: VBS: setInterval не работает

window.setInterval принимает в качестве первого аргумента либо строку кода, либо ссылку на функцию (во втором случае, кстати, указывать язык не нужно и бесполезно).
Такая запись

setInterval f(), 1000, "VBScript"

как раз соответствует первому случаю:
вызвать функцию f, в предположении что она возвратит строку кода на VBScript, и затем уже запускать через 1000 мс порождённый функцией код.

А вот так будет запускаться через 1000 мс сама фунция f (первым аргументом — ссылка на неё):

setInterval GetRef("f"), 1000
no-coder пишет:

выскакивает ошибка Internet Explorer "Несоответствие типа: 'f'"

в чём моя ошибка?

А откуда IE знать о функции в вызвавшем его скрипте? При этом, возможно, что в загруженном в него (IE) документе уже есть функция или переменная с таким именем.