<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; JScript: гибрид WSH и NET]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=9327</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=9327&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «JScript: гибрид WSH и NET».]]></description>
		<lastBuildDate>Mon, 20 May 2019 13:16:12 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: JScript: гибрид WSH и NET]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=134414#p134414</link>
			<description><![CDATA[<p><strong>NovaRo</strong>, вернулся с дачи. Решил заглянуть как у Вас прогресс. ) О боги... Ну прекращайте уже мучать COM объект. Ещё раз повторяю - это неверный путь. Тупиковый. Неудачно выбранный. Вы же уже убедились, что с JSON.NET всё работает. ) Используйте его.</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Mon, 20 May 2019 13:16:12 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=134414#p134414</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: гибрид WSH и NET]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=134387#p134387</link>
			<description><![CDATA[<p><strong>Xameleon</strong><br />Не перестаю удивляться вашему мастерству!) <br />НО, мы были на верном пути. Кстати, я пробовал вариант с window.Run - но, вот за метод exec, как-то забыл!<br />И еще... Если не затруднит - Вы не могли бы запустить приведенный код у себя - получаю странную ошибку: <br />&quot;JSON parse error. Error: Object required&quot;<br />А то я уже в растерянности - &quot;то ли лыжи не едут... &quot;. Где на этот раз прокол?<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>import System;
import System.IO;
import JScript.NET.Samples;
import System.Threading;
import System.Collections.IEnumerable;
import System.Net.ServicePointManager;
import System.Runtime.Serialization.Json;
import System.Collections;
import System.Management;
import System.Globalization;
import System.Xml;
import System.Net;
import System.Net.Security;
import System.Security.Cryptography.X509Certificates;
import System.Collections.Generic;
import System.Linq;
import System.Web;
import System.Web.Extensions;
import System.Web.Script.Serialization;
import System.Runtime.Serialization.Json;
import System.Text;
import System.IO.UnmanagedMemoryStream;
var Args:String[] = Environment.GetCommandLineArgs();

package JScript.NET.Samples {  

class CallbackClass {
static function Callback(
		se		:Object
		,cert		:X509Certificate
		,chain		:X509Chain
		,sslError	:SslPolicyErrors): boolean
	{
		return true
	}
}

public class saveJson {

public static function Main(Args:String[]) : void {

function createHTMLDocument(version){
	var document = new ActiveXObject(&#039;htmlfile&#039;), JSON:Object = {};
	var e = document.createElement(&#039;meta&#039;);
	e.setAttribute(&#039;http-equiv&#039;,&#039;x-ua-compatible&#039;)
	e.setAttribute(&#039;content&#039;,&#039;ie=8&#039;)
	if(document.IHTMLDocument2_write){
		document.IHTMLDocument2_write(e.outerHTML)
	} else {
		document.write(e.outerHTML)
	}
	return document
};
// Формирование документа в режиме максимальной версии
var document = createHTMLDocument(&#039;Edge&#039;);
// Получение ссылки на родительский объект окна
var window = document.parentWindow;
// Получение ссылки на JSON объект
var JSON = window.JSON;

// Создание функции, которая будет делать обёртку на NET функцию
window.execScript(&#039;function createReviverWrap(fn){return function(key,value){return fn(key,value)}}&#039;)
	
try {
	// Подготовка данных
var v=0;	
	//var data = responsedata; 
       var data = &#039;[{&quot;title&quot;:&quot;Конференция&quot;,&quot;date&quot;:&quot;2014-11-30T12:00:00.000Z&quot;},{&quot;title&quot;:&quot;Заседание&quot;,&quot;date&quot;:&quot;2014-11-30T16:00:00.000Z&quot;}]&#039;;
       System.Console.Write(data); //var wrs =&quot;&quot;	
	// Разбор данных
	var object = JSON.parse(data,window.createReviverWrap(function(key,value){
		//Console.WriteLine(key + &#039;: &#039; + value)
	key.replace(/^\s+|\s+$/g, &#039;&#039;); //
        if (~key.indexOf(&quot;name&quot;)) {                  
        } else {
        //arrayList.Add(value); //34
        //_JScriptArray.push(key);
        Console.WriteLine(key + &#039; &#039; +value + &#039; &#039;+ v);
        v++;
	}
	return value
	}))   	
	//Console.WriteLine(&#039;--------------------&#039;) 	
	// Сборка объекта в текстовое представление и вывод результата
	Console.WriteLine(JSON.stringify(object,,&#039;\t&#039;))  	
} catch(e){
	Console.WriteLine(&#039;JSON parse error. &#039; + e);
}

}
}
}

saveJson.Main(Environment.GetCommandLineArgs());</code></pre></div></div></div>]]></description>
			<author><![CDATA[null@example.com (NovaRo)]]></author>
			<pubDate>Fri, 17 May 2019 09:27:31 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=134387#p134387</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: гибрид WSH и NET]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=134340#p134340</link>
			<description><![CDATA[<p><strong>NovaRo</strong>, </p><p>Думаю всё же лучше остановиться на использовании Newtonsoft JSON, так как он работает и под FW 2.0 и 4.0. И не требует всяческих костылей при работе.</p><p>Сегодня поднял виртуалку с XP. Решил проверить в чём же беда с кодом.</p><p>Вот что выяснил:</p><p>1) На Win XP SP3 по умолчанию не нашёл Framework 2.0 и IE8. Пришлось поставить.<br />2) Выяснил, что строка кода с созданием функции оболочки вызывала ошибку, потому что надо было перед её вызовом инициализировать интерпретатор кода, чтобы он знал какой скрипт выполняет (JScript / VBScript):<br /></p><div class="codebox"><pre><code>window.execScript(&#039;function createReviverWrap(fn){return function(key,value){return fn(key,value)}}&#039;)</code></pre></div><p>вместо eval(...).</p><p>В общем получилось добиться желаемого результата и с таким кодом, но.... Это явно неверный путь ).</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Wed, 15 May 2019 19:31:46 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=134340#p134340</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: гибрид WSH и NET]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=134339#p134339</link>
			<description><![CDATA[<p>Да, все отлично работает!) <br />Просто, до этого мы разбирали варианты именно нативной работы с JSON <strong>без подключения сторонних библиотек</strong> Newtonsoft!<br />И ваше решение с wrapper-ом <em><span class="bbu">отлично работает, но увы, только в связке с Win7</span></em>&nbsp; и даже в версии Net2.0 ! (IE 11).<br />Для XP, как видите пока не выходит. Честно говоря, пока не пойму в чем загвоздка - то ли в особенности компилятора jsc под Win XP Net2.0? Хотя, стоит полноценная версия с SP3 с &quot;фреймворком&quot; v2.0.50727....<br />Чувствую, что в случае с XP, видимо придется остановиться на варианте с <strong>Newtonsoft JSON.NET</strong>. Другого выхода пока не вижу.<br />P.S. на Win7 (под вашим решением) сегодня запустился - работает все четко!<br />Еще раз, спасибо за код!</p>]]></description>
			<author><![CDATA[null@example.com (NovaRo)]]></author>
			<pubDate>Wed, 15 May 2019 19:15:59 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=134339#p134339</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: гибрид WSH и NET]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=134335#p134335</link>
			<description><![CDATA[<p><strong>NovaRo</strong>,</p><p>Перечитал несколько раз, но так и не понял в чём проблема. Что мешает получать индекс элемента при переборе ? <img src="//forum.script-coding.com/img/smilies/neutral.png" width="15" height="15" /><br /></p><div class="codebox"><pre><code>
import System;
import System.Core;
import Newtonsoft.Json;
import Newtonsoft.Json.Serialization;
import Newtonsoft.Json.Linq; 

var data:String = &#039;[{ \
		&quot;key&quot;:&quot;Key 0&quot;, \
		&quot;value&quot;:&quot;A&quot; \
	},{ \
		&quot;key&quot;:&quot;key 1&quot;, \
		&quot;value&quot;:&quot;B&quot;, \
	},{ \
		&quot;key&quot;:&quot;Key 2&quot;, \
		&quot;value&quot;:&quot;C&quot;, \
	},{ \
		&quot;key&quot;:&quot;Key 3&quot;, \
		&quot;value&quot;:&quot;D&quot;, \
	},{ \
		&quot;key&quot;:&quot;Key 4&quot;, \
		&quot;value&quot;:&quot;E&quot;, \
	},{ \
		&quot;key&quot;:&quot;Key 5&quot;, \
		&quot;value&quot;:&quot;F&quot;, \
	}]&#039;;

(function(){
	var objects:Object = {}, object:Object;
	try {
		objects = JsonConvert.DeserializeObject(data,System.Object);
	} catch(e){
		Console.WriteLine(&#039;Parse error ! &#039; + e.description);
		return
	}
	for(var i=0; i &lt; objects.Count;i++){
		object = objects[i];
		Console.WriteLine(i + &#039;) key:&quot;&#039; + object(&quot;key&quot;) + &#039;&quot;, value:&quot;&#039; + object(&quot;value&quot;) + &#039;&quot;&#039;);
	}
	
	Console.WriteLine(&#039;----------------&#039;)
	
	Console.WriteLine(&#039;Reading custom item with index 4: Key &quot;&#039; + objects[4](&quot;key&quot;) + &#039;&quot;, value: &quot;&#039; + objects[4](&quot;value&quot;) + &#039;&quot;&#039;)
	
})();</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Wed, 15 May 2019 11:04:53 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=134335#p134335</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: гибрид WSH и NET]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=134332#p134332</link>
			<description><![CDATA[<p><strong>Parazit</strong><br />тем не менее, в Win7&nbsp; в версии Net2.0&nbsp; (IE 11) - прекрасно отрабатывает!) Повторюсь - <strong>Net2.0&nbsp; (IE 11)</strong></p><div class="quotebox"><blockquote><p>для каких целей Вам нужен обратный вызов процедуры с обработкой</p></blockquote></div><p> <br />Собственно, цель одна: прилетает JSON-объект, в котором коллекция (key,value) переменной длинны. Элементов более 60-ти! <br />Необходимо, каждую пару из&nbsp; этого&nbsp; JSON-объект загнать в массив, для последующего разбора. Суть в чем, - тут <strong>мне важен номер элемента массива</strong> (индекс)!<br />т.е., к примеру в 10 элементе, может быть значения value1.... value60 (т.е. я <em>не знаю</em>, какое значение там). А мне нужно взять значение этого 10 элемента, и&nbsp; записать полученную пару key,value в соответствующую ветку реестра.<br />Для этого и нужен массив. Как-то так....)<br />Надеюсь, получилось донести мысль.</p>]]></description>
			<author><![CDATA[null@example.com (NovaRo)]]></author>
			<pubDate>Wed, 15 May 2019 10:27:41 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=134332#p134332</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: гибрид WSH и NET]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=134331#p134331</link>
			<description><![CDATA[<p><strong>Parazit</strong>, <strong>fn</strong> это переданная из NET кода ссылка на функцию, которая ложится в обёртку. Посмотрите мой код выше.</p><p><strong>NovaRo</strong>, к сожалению пока проверить не на чем. Нет XP под рукой. Как я понял, <strong>JavaScriptSerializer</strong> работает только под NET 4.0. Поэтому предпочтение отдаю всё-таки именно <strong>Newtonsoft JSON.NET</strong>. Кстати возник вопрос - а для каких целей Вам нужен обратный вызов процедуры с обработкой key, value групп ? Почему не перебрать их уже в результирующем подготовленном объекте ?</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Wed, 15 May 2019 09:52:49 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=134331#p134331</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: гибрид WSH и NET]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=134330#p134330</link>
			<description><![CDATA[<div class="quotebox"><cite>NovaRo пишет:</cite><blockquote><p>window.eval(&#039;function createReviverWrap(fn){return function(key,value){return <span style="color: red">fn</span>(key,value)}}&#039;);</p></blockquote></div><p>А что возвращает функция fn?<br />У неё даже тела нет.<br />Как она может что-то возвратить?<br />Соответственно, все родительские функции тоже ничего не возвращают.<br />А компилятор же ждёт некие данные, и не получив их, очень злится и ругается.</p>]]></description>
			<author><![CDATA[null@example.com (Parazit)]]></author>
			<pubDate>Wed, 15 May 2019 09:20:39 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=134330#p134330</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: гибрид WSH и NET]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=134326#p134326</link>
			<description><![CDATA[<p><strong>Xameleon</strong><br />К сожалению да... И именно в XP - версия Net2.0&nbsp; (IE 8)... ((</p>]]></description>
			<author><![CDATA[null@example.com (NovaRo)]]></author>
			<pubDate>Wed, 15 May 2019 07:27:38 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=134326#p134326</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: гибрид WSH и NET]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=134322#p134322</link>
			<description><![CDATA[<p><strong>NovaRo</strong>, и мой целиковый пример тоже ?</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Tue, 14 May 2019 18:09:57 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=134322#p134322</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: гибрид WSH и NET]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=134321#p134321</link>
			<description><![CDATA[<p>Ок! <br />Так сработало!&nbsp; в Win7&nbsp; в версии Net2.0 и Net4.0 (IE 11) - работает отлично!<br />В XP - версия Net2.0&nbsp; (IE 8)&nbsp; - все равно, бьет&nbsp; эксепшн на сам враппер:</p><div class="codebox"><pre><code>window.eval(&#039;function createReviverWrap(fn){return function(key,value){return fn(key,value)}}&#039;); </code></pre></div><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><p>Unhandled Exception: Microsoft.JScript.JScriptException: Function expected<br />Function expected<br />&nbsp; &nbsp;at Microsoft.JScript.LateBinding.CallCOMObject(IReflect ir, String name, Object ob, Binder binder, Object[] arguments, Parame<br />terModifier[] modifiers, CultureInfo culture, String[] namedParameters, Boolean construct, Boolean brackets, VsaEngine engine)<br />&nbsp; &nbsp;at Microsoft.JScript.LateBinding.Call(Binder binder, Object[] arguments, ParameterModifier[] modifiers, CultureInfo culture,<br />String[] namedParameters, Boolean construct, Boolean brackets, VsaEngine engine)<br />&nbsp; &nbsp;at Microsoft.JScript.LateBinding.Call(Object[] arguments, Boolean construct, Boolean brackets, VsaEngine engine)<br />&nbsp; &nbsp;at JScript.NET.Samples.CommandLineParser.Add() in test1.js:line 140<br />&nbsp; &nbsp;at JScript 0.Global Code() in test1.js:line 244<br />&nbsp; &nbsp;at JScript Main.Main(String[] )</p></div></div>]]></description>
			<author><![CDATA[null@example.com (NovaRo)]]></author>
			<pubDate>Tue, 14 May 2019 17:34:00 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=134321#p134321</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: гибрид WSH и NET]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=134320#p134320</link>
			<description><![CDATA[<p>Пардон. Я у себя фиксил вроде бы вот так:</p><div class="codebox"><pre><code>
// Функция создания HTML документа
function createHTMLDocument(version){
	var document = new ActiveXObject(&#039;htmlfile&#039;);
	var e = document.createElement(&#039;meta&#039;);
	e.setAttribute(&#039;http-equiv&#039;,&#039;x-ua-compatible&#039;);
	e.setAttribute(&#039;content&#039;,&#039;ie=&#039; + version)
	if(document.IHTMLDocument2_write){
		document.IHTMLDocument2_write(e.outerHTML);
	} else {
		document.write(e.outerHTML);
	}
	return document
};
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Tue, 14 May 2019 11:38:31 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=134320#p134320</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: гибрид WSH и NET]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=134319#p134319</link>
			<description><![CDATA[<p>Кстати, как оказалось, я немного рано радовался -&nbsp; всплыл еще один неприятный момент,&nbsp; - под Net2.0 именно на ХР (на Win7, под тем же Net2.0 все работает отлично)<br />конструкции вида:<br /></p><div class="codebox"><pre><code>htmlfile.IHTMLDocument2_write(&#039;&lt;meta http-equiv=&quot;x-ua-compatible&quot; content=&quot;IE=8&quot; /&gt;&#039;);
window.eval(&#039;function createReviverWrap(fn){return function(key,value){return fn(key,value)}}&#039;); </code></pre></div><p>не работают корректно... ( Код компилируется, но при запуске скрипта, одна и та же ошибка:<br />Видимо, это как-то связано с особенностью компилирования именно под XP... Вот такой оборот....<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><p>Unhandled Exception: Microsoft.JScript.JScriptException: Function expected<br />Function expected<br />&nbsp; &nbsp;at Microsoft.JScript.LateBinding.CallCOMObject(IReflect ir, String name, Object ob, Binder binder, Object[] arguments, Parame<br />terModifier[] modifiers, CultureInfo culture, String[] namedParameters, Boolean construct, Boolean brackets, VsaEngine engine)<br />&nbsp; &nbsp;at Microsoft.JScript.LateBinding.Call(Binder binder, Object[] arguments, ParameterModifier[] modifiers, CultureInfo culture,<br />String[] namedParameters, Boolean construct, Boolean brackets, VsaEngine engine)<br />&nbsp; &nbsp;at Microsoft.JScript.LateBinding.Call(Object[] arguments, Boolean construct, Boolean brackets, VsaEngine engine)<br />&nbsp; &nbsp;at JScript.NET.Samples.CommandLineParser.Add.createHTMLDocument(Object this, VsaEngine vsa Engine, Object version)<br />&nbsp; &nbsp;at JScript.NET.Samples.CommandLineParser.Add()<br />&nbsp; &nbsp;at JScript 0.Global Code()<br />&nbsp; &nbsp;at JScript Main.Main(String[] )</p></div></div>]]></description>
			<author><![CDATA[null@example.com (NovaRo)]]></author>
			<pubDate>Tue, 14 May 2019 11:16:22 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=134319#p134319</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: гибрид WSH и NET]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=134318#p134318</link>
			<description><![CDATA[<p><strong>alexii</strong>,</p><p><a href="https://www.json.org/">https://www.json.org/</a></p><p>Прокрутите страницу до самого низа. Там множество вариантов реализация для разных языков.</p><p>Для чистого JS: <a href="https://github.com/douglascrockford/JSON-js">https://github.com/douglascrockford/JSON-js</a></p><p>Для VBS подойдёт вариант, который использовался выше в этой теме. Либо использование <a href="https://github.com/douglascrockford/JSON-js/blob/master/json2.js">json2.js</a> в соединении через WSC / WSF.</p><p><strong>NovaRo</strong>, я бы всё-таки порекомендовал использовать нативные способы. ) В частности разобраться с <strong>JavaScriptSerializer</strong></p><p>Я рад, что смог Вам помочь с кодом, но мне кажется, что радоваться рано. Это решение, как говорится &quot;по бедности&quot; и наверняка может быть реализовано правильнее. К сожалению, как я уже говорил, я очень плохо знаю возможности JScript.NET и потому сделал так. Но однозначно уверен, что использование родных NET-овских объектов в среде NET будет работать оптимальнее.</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Tue, 14 May 2019 07:52:20 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=134318#p134318</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: гибрид WSH и NET]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=134317#p134317</link>
			<description><![CDATA[<p>А без .Net, на «гольном» JScript/VBScript возможно преобразование текстового JSON в массив/коллекцию?</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Mon, 13 May 2019 22:51:36 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=134317#p134317</guid>
		</item>
	</channel>
</rss>
