<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; COM-объект, умеющий исполнять JScript.]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=7867&amp;type=atom" />
	<updated>2013-09-17T06:30:30Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=7867</id>
		<entry>
			<title type="html"><![CDATA[Re: COM-объект, умеющий исполнять JScript.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=75416#p75416" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>function [СоздатьОбъект]([Строка])
    set [СоздатьОбъект]=CreateObject([Строка])
end function

set [ХТМЛ] = [СоздатьОбъект](&quot;htmlfile&quot;)
[ХТМЛ].Open(&quot;text/html&quot;)
&#039;&lt;-- Подготовим нужные методы
[ХТМЛ].Write(&quot;&lt;script language=&#039;JScript&#039;&gt;var ХТМЛ;Новый=function(x,y){return new x(y)}&lt;/script&gt;&quot;)
set [Док]=[ХТМЛ].documentElement.document
&#039; Внедрение объекта Скрипта в самого себя, для сохранности контекста
[Док].Script.[ХТМЛ]=[ХТМЛ]
set [Это]=[Док].Script
set [Математика]=[Это].Math
msgbox [Математика].pow(2,8)
set [Дата]=[Это].[Новый]([Это].Date,Now)
msgbox [Дата].toString(0)
msgbox [Дата].getTime(0)</code></pre></div>]]></content>
			<author>
				<name><![CDATA[smaharbA]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2911</uri>
			</author>
			<updated>2013-09-17T06:30:30Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=75416#p75416</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: COM-объект, умеющий исполнять JScript.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=75391#p75391" />
			<content type="html"><![CDATA[<p><strong>omegastripes</strong>, большое спасибо за содержательное замечание!! Особенно интересно<br /></p><div class="codebox"><pre><code>msgbox jsglobal.eval(&quot;({transfer:window})&quot;).transfer is jsglobal &#039; отображает Истина
msgbox jsglobal.eval(&quot;({transfer:this})&quot;).transfer is jsglobal &#039; отображает Истина
</code></pre></div><p>и<br /></p><div class="codebox"><pre><code>jsglobal.execscript &quot;;&quot;, &quot;jscript&quot;
</code></pre></div><div class="quotebox"><cite>omegastripes пишет:</cite><blockquote><p>Вот в этом посте <a href="http://forum.script-coding.com/viewtopic.php?pid=33067#p33067">http://forum.script-coding.com/viewtopi … 067#p33067</a> приведен скрипт от <strong>JSman</strong>, получающий глобальный объект JScript из htmlfile.</p></blockquote></div><p>Ну да, подобное мне <a href="http://forum.script-coding.com/viewtopic.php?pid=66259#p66259"> известно</a>. Скорее всего, я имел ввиду, что не работает<br /></p><div class="codebox"><pre><code>Set htmldoc = CreateObject(&quot;htmlfile&quot;)
Set Script = htmldoc.Script &#039; то же, что htmldoc.parentWindow
Script.execScript &quot;var eval = eval;&quot;, &quot;JScript&quot;

Set JsGlobal = Script.eval(&quot;this&quot;)
</code></pre></div><p>Почему не захотел использовать уже полученный объект <em>Script</em>, сейчас сказать не могу.</p><div class="quotebox"><cite>omegastripes пишет:</cite><blockquote><p>но все же - от чего так происходит?</p></blockquote></div><p>Для меня это загадка природы.</p>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2013-09-15T17:35:43Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=75391#p75391</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: COM-объект, умеющий исполнять JScript.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=75386#p75386" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>Хотя, к слову, из <em>htmlfile</em> передать глобальный объект JScript в VBScript&nbsp; мне не удалось.</p></blockquote></div><p>Вот в этом посте <a href="http://forum.script-coding.com/viewtopic.php?pid=33067#p33067">http://forum.script-coding.com/viewtopi … 067#p33067</a> приведен скрипт от <strong>JSman</strong>, получающий глобальный объект JScript из htmlfile. Ниже привожу скрипт, использующий данную технику, в комментариях я указал вывод msgbox:<br /></p><div class="codebox"><pre><code>&#039; получение jsglobal
set htmlfile = createobject(&quot;htmlfile&quot;)
set jsglobal = htmlfile.parentwindow
jsglobal.execscript &quot;;&quot;, &quot;jscript&quot;
&#039; тестирование
msgbox jsglobal.math.pi &#039; отображает 3,14159265358979
jsglobal.eval(&quot;var dict = new ActiveXObject(&#039;Scripting.Dictionary&#039;); dict(&#039;mykey&#039;) = &#039;myvalue&#039;; alert(&#039;test&#039;);&quot;)
msgbox jsglobal.dict.item(&quot;mykey&quot;) &#039; отображает myvalue
msgbox typename(jsglobal.eval(&quot;window&quot;)) &#039; отображает Empty
msgbox typename(jsglobal.eval(&quot;this&quot;)) &#039; отображает Empty
msgbox typename(jsglobal.eval(&quot;(function a(){return window})()&quot;)) &#039; отображает Empty
msgbox typename(jsglobal.eval(&quot;(function b(){return this})()&quot;)) &#039; отображает Empty
msgbox jsglobal.eval(&quot;({transfer:window})&quot;).transfer is jsglobal &#039; отображает Истина
msgbox jsglobal.eval(&quot;({transfer:this})&quot;).transfer is jsglobal &#039; отображает Истина
set htmlfile = nothing</code></pre></div><p>jsglobal.eval() возвращает Empty вместо объектов, но если создать объект со свойством transfer, то через это свойство объекты передаются как и ожидалось. Я не особо силен в JScript и ответ может быть очевиден, но все же - от чего так происходит?</p>]]></content>
			<author>
				<name><![CDATA[omegastripes]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=29228</uri>
			</author>
			<updated>2013-09-15T14:33:40Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=75386#p75386</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: COM-объект, умеющий исполнять JScript.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=66889#p66889" />
			<content type="html"><![CDATA[<p>COM-объект, умеющий исполнять JScript:<br /></p><div class="codebox"><pre><code>&lt;component&gt;
&lt;public&gt;&lt;method name=&#039;eval&#039;/&gt;&lt;/public&gt;
&lt;script language=&#039;JScript&#039;&gt;&lt;/script&gt;
&lt;/component&gt;</code></pre></div><p>— сохранить в файл с расширением «wsc».<br />Так как я не знаю, где его нужно использовать, то приведу пример вызова из VBSript:<br /></p><div class="codebox"><pre><code>Set JS = GetObject(&quot;script:&quot; &amp; WScript.ScriptFullName &amp; &quot;\..\JS.wsc&quot;)
MsgBox JS.eval(&quot;2*2&quot;)

Set JsGlobal = JS.eval(&quot;this&quot;)
MsgBox JsGlobal.Math.PI
</code></pre></div><p>То же на AutoHotkey <em>(добавлено 30.12.2013)</em>:<br /></p><div class="codebox"><pre><code>JS := ComObjGet(&quot;script:&quot; . A_ScriptDir . &quot;\JS.wsc&quot;)
MsgBox % JS.eval(&quot;2*2&quot;)

JsGlobal := JS.eval(&quot;this&quot;)
MsgBox % JsGlobal.Math.PI
</code></pre></div><p>Вместо трансляции функции <em>eval()</em> можно сразу передавать глобальный объект JScript (хотя код wsc в этом случае будет чуть менее минималистичным) или и то и другое сразу, хотя достаточно чего-либо одного — второе можно будет получить через него. (Хотя, к слову, из <em>htmlfile</em> передать глобальный объект JScript в VBScript&nbsp; мне не удалось.)</p><p>--------------------<br /><em>02.01.2014:</em> Добавил решение в коллекцию: <a href="http://forum.script-coding.com/viewtopic.php?id=9101">AHK: Выполненние JScript-кода с помощью WSC</a>.</p>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2012-12-11T22:11:27Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=66889#p66889</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: COM-объект, умеющий исполнять JScript.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=66886#p66886" />
			<content type="html"><![CDATA[<p>Спасибо, думаю, это подойдёт. Без WScript постараюсь обойтись <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[vo1ty]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=28909</uri>
			</author>
			<updated>2012-12-11T19:04:45Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=66886#p66886</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: COM-объект, умеющий исполнять JScript.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=66884#p66884" />
			<content type="html"><![CDATA[<p>Есть Microsoft Script Control. Правда, WScript в нём тоже нет, т.к. это объект Windows Script Host (wscript.exe/cscript.exe).</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2012-12-11T18:25:34Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=66884#p66884</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[COM-объект, умеющий исполнять JScript.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=66865#p66865" />
			<content type="html"><![CDATA[<p>Доброго времени суток! Вопрос у меня следующий. Есть ли в Windows такой ActiveX объект, который умеет &quot;заглатывать&quot; JScript? &quot;htmlfile&quot; не подходит, поскольку, скажем, если скормить ему вот это:<br /></p><div class="codebox"><pre><code>var WSO = new ActiveXObject(&#039;Scripting.WindowSystemObject&#039;);</code></pre></div><p>Он скажет, что ему не удалось завершить действие. Также нет доступа к WScript, файловой системе и многому другому.</p>]]></content>
			<author>
				<name><![CDATA[vo1ty]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=28909</uri>
			</author>
			<updated>2012-12-11T15:35:11Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=66865#p66865</id>
		</entry>
</feed>
