<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS: Callback с параметрами (пример)]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=13454</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=13454&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS: Callback с параметрами (пример)».]]></description>
		<lastBuildDate>Fri, 09 Feb 2018 14:44:50 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[VBS: Callback с параметрами (пример)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=123646#p123646</link>
			<description><![CDATA[<p>Оставлю тут, а то многие спрашивали.<br /></p><div class="codebox"><pre><code>
Option Explicit

RunInConsoleMode

Dim urls, url, xhr, i, n
urls = Array(&quot;http://www.altavista.com&quot;, _
			&quot;http://www.google.ru&quot;, _
			&quot;http://www.rambler.ru&quot;, _
			&quot;http://www.unknownurl.com&quot;, _
			&quot;http://www.yandex.ru&quot;, _
			&quot;http://www.vesti.ru&quot;, _
			&quot;http://www.gazeta.ru&quot;)
			
For i = Lbound(urls) to Ubound(urls)
	url = urls(i)
	Set xhr = CreateObject(&quot;MSXML2.ServerXMLHTTP.6.0&quot;)
	WScript.Echo &quot;Request &quot; &amp; i &amp; &quot; &quot; &amp; url
	With xhr
		.setTimeouts 5000, 5000, 15000, 15000
		.onreadystatechange = New Callback.Set(Array(GetRef(&quot;xhr_onreadystatechange&quot;), i, xhr, url))
		.open &quot;GET&quot;, url, true
		.send
	End With
Next

WScript.Echo(String(50,&quot;-&quot;))

WScript.Sleep 3000

&#039;Функция обратного вызова
Function xhr_onreadystatechange(i, xhr, url)
	if xhr.readyState &lt;&gt; 4 then Exit Function
	WScript.Echo &quot;Response &quot; &amp; i &amp; &quot; &quot; &amp; url &amp; &quot; &quot; &amp; xhr.status &amp; &quot; &quot; &amp; xhr.statusText
End Function
				

WScript.Echo &quot;Press &quot;&quot;Enter&quot;&quot; to close&quot;

WScript.StdIn.ReadLine
 
Class Callback
	Private arr
	&#039;Функция установки параметров
	&#039;args - Array(Object, [MethodName], [arg1], [arg2], ..., [argN])
	&#039;Object - Object / Class / Function / Sub
	Function [Set](args)
		If Not isArray(args) Then Err.Raise 13, TypeName(Me)
		arr = args
		Set [Set] = Me
	End Function
	
	&#039;Метод, вызываемый у объекта по умолчанию
	Public Default Sub []()
		Dim i, Code, lb
		If Not isArray(arr) Then Exit Sub
		lb = Lbound(arr)
		For i = lb + 1 to Ubound(arr)
			Code = Code &amp; &quot;,arr(&quot; &amp; i &amp; &quot;)&quot;
		Next
		Code = &quot;(&quot; &amp; mid(Code,2) &amp; &quot;)&quot;
		Eval &quot;arr(lb)&quot; &amp; Code
	End Sub
End Class

Sub RunInConsoleMode()
	If InStr(1,WScript.FullName,&quot;cscript&quot;,1) &gt; 0 Then Exit Sub
	CreateObject(&quot;WScript.Shell&quot;).Run(&quot;cscript /nologo &quot;&quot;&quot; &amp; WScript.ScriptFullName &amp; &quot;&quot;&quot;&quot;)
	WScript.Quit
End Sub
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Fri, 09 Feb 2018 14:44:50 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=123646#p123646</guid>
		</item>
	</channel>
</rss>
