<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; CMD/BAT + HTML: два в одном]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=8742&amp;type=atom" />
	<updated>2014-04-18T06:59:16Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=8742</id>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT + HTML: два в одном]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=81920#p81920" />
			<content type="html"><![CDATA[<p>Это частично пересекается с решением CMD/BAT + JavaScript: два в одном.</p><p>Встречал другой вариант запуска JS из CMD с использованием MSHTA. Не вижу большой выгоды от использования последнего в силу трудности поддержки и потери читабельности кода. Тем не менее вот еще одно решение с помощью которого можно выполнить JS-код:. Однако среда исполнения другая - браузер. Возможно, в некоторых случаях это может оказаться полезным.</p><p><strong>hello_world.bat</strong><br /></p><div class="codebox"><pre><code>
@if (true == false) @end /*!

@echo off

mshta &quot;about:&lt;script src=&#039;file://%~f0&#039;&gt;&lt;/script&gt;&lt;script&gt;close()&lt;/script&gt;&quot; %*

goto :EOF

*/

alert(&quot;Hello, world!&quot;);

</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2014-04-18T06:59:16Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=81920#p81920</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT + HTML: два в одном]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=79325#p79325" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Вот только не стал бы разбивать без нужды весь cmd-код на части.</p></blockquote></div><p>По крайней мере в XP SP1, как помню, если в начале HTA до первого из тегов &lt;HTML&gt;, &lt;BODY&gt;, &lt;HEAD&gt; или &lt;SCRIPT&gt; был умеренно большой комментарий, то всё содержимое отображалось как plain text вместо HTML.</p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Первоначальные варианты первой строки</div><div class="fancy_spoiler"><div class="codebox"><pre><code>&lt;!--:nul rem</code></pre></div><div class="codebox"><pre><code>&lt;!--:nul cls</code></pre></div><div class="codebox"><pre><code>&lt;!--:nul goto BAT</code></pre></div><p>— последние два работают из командных файлов, но не при ручном вводе команд, первый, как и<br /></p><div class="codebox"><pre><code>&lt;!-- rem</code></pre></div><p>не выдаёт ошибки и при ручном вводе.</p></div></div>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2014-01-19T00:35:35Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=79325#p79325</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT + HTML: два в одном]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=79322#p79322" />
			<content type="html"><![CDATA[<p>Круто! Весь cmd-код находится в html-комментарии. и не требуется, как это было в моем сообщении, дополнительный код для удаления лишней разметки. Вот только не стал бы разбивать без нужды весь cmd-код на части. Пусть будет так:</p><div class="codebox"><pre><code>
&lt;!-- :
@echo off
start &quot;&quot; mshta.exe &quot;%~f0&quot;
exit /b
--&gt;

&lt;html&gt;
&lt;head&gt;&lt;title&gt;HTA window&lt;/title&gt;&lt;/head&gt;
&lt;body&gt;&lt;h1&gt;Hello, world!&lt;/h1&gt;&lt;/body&gt;
&lt;/html&gt;
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2014-01-19T00:00:12Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=79322#p79322</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT + HTML: два в одном]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=79318#p79318" />
			<content type="html"><![CDATA[<p>И даже так:<br /></p><div class="codebox"><pre><code>&lt;!-- :
. . .</code></pre></div>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2014-01-18T22:42:23Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=79318#p79318</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT + HTML: два в одном]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=79317#p79317" />
			<content type="html"><![CDATA[<p>У меня чисто работает:<br /></p><div class="codebox"><pre><code>&lt;!--:nul :
@goto BAT
--&gt;

&lt;html&gt;
&lt;head&gt;&lt;title&gt;HTA window&lt;/title&gt;&lt;/head&gt;
&lt;body&gt;&lt;h1&gt;Hello, world!&lt;/h1&gt;&lt;/body&gt;
&lt;/html&gt;

&lt;!--
:BAT
@echo off
start &quot;&quot; mshta.exe &quot;%~f0&quot;
exit /b
--&gt;
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2014-01-18T22:14:26Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=79317#p79317</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT + HTML: два в одном]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76312#p76312" />
			<content type="html"><![CDATA[<p>Я экспериментировал с решением проблемы - как удалить лиший код (bat-составляющая) из результирующего html-кода. первоначальный вариант был существенно длиннее. Потом я понял как это работает. Когда запускается mshta, тот, в свою очередь, запускает html-парсер, который начинает строить DOM из того, что есть: <br />1. Вначале строит HTML, потом BODY, в который попадает начало файла. <br />2. Затем встречаются теги HTML, BODY, и все начинается сначала. Но DOM уже построен и парсер снова перестраивает его с учетом того, что уже есть. <br />Однако если сразу запустить код с очисткой - <strong>body.innerHTML = &#039;&#039;</strong>, - то BODY будет пустым, и, на стадии 2, результирующий DOM оказывается чист. Этого достаточно. Мне кажется, что дополнительные работы по очистке кода избыточны. Возможно - нет. Но я не знаю, насколько это решение востребовано. Если оно и интересует меня, то только с академической точки зрения - то есть вопрос &quot;можно ли так сделать&quot; решен.</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2013-10-21T19:21:29Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76312#p76312</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT + HTML: два в одном]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76309#p76309" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Очередное мое извращение на тему два-в одном.</p></blockquote></div><div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p><strong>Поизвращённее</strong> <br />А смысл? Какую пользу дает код?</p></blockquote></div><p>Код предназначен для того же, что и ваш (+ несколько отладочных alert-ов), соответственно, даёт такую же пользу.<br />Дополнительная побочная польза:<br /></p><div class="quotebox"><blockquote><p>Более того: обновление будет работать даже если удалить исходный файл.</p></blockquote></div><p>На самом деле, «поизвращённее» — всего лишь предупредительно-виноватая защита от того, что этот пример именно так будет воспринят читателем; хотя он, в данный момент, кожется мне наоборот более прямолинейно-лобовым чем ваш, по крайней мере более общим (в том смысле, что может применяться и при наложении других технологий и при переналожении одной и той же же технологии на саму себя). Лучше или хуже, этого я до сих пор не решил.</p><p>Раньше я думал над поднятым в этой теме вопросом, но никакого «валидного» решения в голову не приходило (так, чтобы лишние символы от bat-составляющей не попадали в BODY), и мне казалось, что решение невозможно, т.к. если появится символ недопустимый в HEAD, он и <span class="bbu">всё что идёт за ним</span> автоматически попадает в BODY. Так что ваше решение с очисткой <em>body.innerHTML</em> оказалось для меня довольно неожиданным. Возможно, оно работает только в Internet Explorer, в любом случае — довольно неочевидное и уже за это заслуживает помещения в Коллекцию.</p><p>Увидев, что решение существует, я попробовал найти ещё какое-нибудь и понял, что для этого можно использовать приём повторной загрузки, использованный перед этим при решении вопроса о размещении нескольких заданий в одном JScript-файле («при переналожении одной и той же же технологии на саму себя», используется <em>eval()</em> и условная компиляция).</p>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2013-10-21T18:51:56Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76309#p76309</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT + HTML: два в одном]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76249#p76249" />
			<content type="html"><![CDATA[<p><strong>Поизвращённее </strong><br />А смысл? Какую пользу дает код?</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2013-10-21T09:16:25Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76249#p76249</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT + HTML: два в одном]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=75902#p75902" />
			<content type="html"><![CDATA[<p>На самом деле, в #2 повторно считывать файл было вовсе не обязательно (но подобный подход может пригодится в других случаях)!<br />Вместо<br /></p><div class="codebox"><pre><code>  document.write(&quot;\&lt;\!-\-&quot;);
  document.write(
    (new ActiveXObject(&quot;Scripting.FileSystemObject&quot;)).
      OpenTextFile(location.pathname, 1).ReadAll()
  );
</code></pre></div><p>можно написать<br /></p><div class="codebox"><pre><code>  document.write(&quot;\&lt;\!-\-&quot; + document.documentElement.outerHTML);</code></pre></div><p>(в этом случае в окончательный код попадает закрывающий тег &lt;/COMMENT&gt;, но это не страшно, да и для исправления можно в конец исходного кода поместить ещё один открывающий &lt;COMMENT&gt;)</p><p>или<br /></p><div class="codebox"><pre><code>  document.write(
    &quot;\&lt;\!-\-&quot; + document.getElementsByTagName(&quot;comment&quot;).item(0).innerHTML);
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2013-10-09T18:23:39Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=75902#p75902</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT + HTML: два в одном]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=75865#p75865" />
			<content type="html"><![CDATA[<p>Поизвращённее — с двойной загрузкой (не знаю, сочтёт ли кто-либо это полезным или поучительным):<br /></p><div class="codebox"><pre><code>@echo off &amp; goto :BAT
&lt;script type=&quot;text/javascript&quot;&gt;
alert(&quot;\
При обновлении (F5) этого сообщения больше не будет.\n\n\
Более того: обновление будет работать даже если удалить исходный файл.\
&quot;);
var x=1;
window.onload = function () {
  document.write(&quot;\&lt;\!-\-&quot;);
  document.write(
    (new ActiveXObject(&quot;Scripting.FileSystemObject&quot;)).
      OpenTextFile(location.pathname, 1).ReadAll()
  );
  document.close();
};
&lt;/script&gt;
&lt;comment&gt;

:BAT
start mshta &quot;%~f0&quot;
goto :EOF

--&gt;

&lt;html&gt;
&lt;head&gt;
&lt;title&gt;HTML-in-BATCH&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Hello, world!&lt;/h1&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
alert(&quot;x&quot; in this);
window.onload = function () {
  var html = &quot;&quot;;
  for (var i = 0; i &lt; document.childNodes.length; i++)
    html += document.childNodes.item(i).outerHTML;
  alert(html);
};
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2013-10-09T04:47:35Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=75865#p75865</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[CMD/BAT + HTML: два в одном]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=75830#p75830" />
			<content type="html"><![CDATA[<p>По мотивам тем<br /><a href="http://forum.script-coding.com/viewtopic.php?id=2886">CMD/BAT + JavaScript: два в одном</a><br /><a href="http://forum.script-coding.com/viewtopic.php?id=6304">JScript:CMD - вариант с условной компиляцией</a><br /><a href="http://forum.script-coding.com/viewtopic.php?id=6519">CMD/BAT + VBScript: два в одном</a></p><p>Очередное мое извращение на тему два-в одном. В этот раз (как видно из заголовка) попытка внедрить html разметку в пакетный файл. Над целесообразностью пока не задумывался. Может быть скрипт должен выполнить некие предварительные действия перед запуском mshta. Может быть как комплексный вариант приложения, обладающего двумя интерфейсами: консольным и графическим (HTA). В таком случае стоит уже говорить уже о CMD/BAT+JavaScript+HTML: три в одном.</p><p>Следующий пример - скелет для комбинирования html-разметки в пакетных файлах, состоящий из нескольких частей:<br />1. своеобразного пролога - определенной конструкции, которая позволяет объединить два разных мира<br />2. вступления - запускателя mshta<br />3. интермеццо - js-скрипта, который подчищает мусор, оставшийся после пакетного скрипта<br />4. основной части - суть html-разметки</p><div class="codebox"><pre><code>
:&lt;nul&gt;nul

@echo off
start mshta &quot;%~f0&quot;
goto :EOF

&lt;script type=&quot;text/javascript&quot;&gt;
document.body.innerHTML = &#039;&#039;;
&lt;/script&gt;

&lt;html&gt;
&lt;head&gt;
&lt;title&gt;HTML-in-BATCH&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Hello, world!&lt;/h1&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2013-10-07T13:17:30Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=75830#p75830</id>
		</entry>
</feed>
