Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Формирование html с помощью javascript (https://javascript.ru/forum/misc/51339-formirovanie-html-s-pomoshhyu-javascript.html)

Alex12320 03.11.2014 13:32

Формирование html с помощью javascript
 
Доброго времени суток!
Помогите пожалуйста начинающему программисту. нужно написать скрипт который формировал бы небольшую html страницу. написал код, но он не работает, не может найти не одной функции. полный текст следующий:

<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<script type="text/javascript">

<!--

function GetWayToFile()
{
var n = window.prompt("Введите путь к корневому файлу", "");
return n;
}

function GetHeader()
{
var page = '<html>\n<header>\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n</header>\n';
}
function GetFiles() {
  var folderspec = "c:\\";
  var fso = new ActiveXObject("Scripting.FileSystemObject");
   var f = fso.GetFolder(folderspec);
   var fc = new Enumerator(f.Files);
   var s = new array(100);
   var num = 0;
   for (; !fc.atEnd(); fc.moveNext())
   {
	s[num] += fc.item();
	num+=1;
	};
   return s;
}
function MakeText(){
	var PageText = '';
	PageText+= GetHeader();
	var BodyTextStart = '<body>\n';
	var BodyDivText = '';
	var ImgArr = GetFiles();
	var BodyTextFinal = '</body>\n</html>';
	var count = 0;
	while (ImgArr[count]<>'')
	{
		BodyDivText = BodyDivText +'<div class = "photo"><img class = "img" src = "' + ImgArr[count]+ '" ></div>\n';
		count++;
	}
	PageText=BodyTextStart+BodyDivText+BodyTextFinal;
	WriteToFile(PageText);
	return 0;
}
function WriteToFile(text)
{
var fso = new ActiveXObject('Scripting.FileSystemObject');
var s = fso.CreateTextFile("C:\\NewFile.html", true);
s.WriteLine(text);
s.WriteLine('***********************');
s.Close();
}
//-->
</script>
</head>
<body>
<a href="#" onclick='GetWayToFile();'>Указать папку</a>
<a href="#" onclick='MakeText();'>Сформировать файлы</a>
</body>
</html>

Если убрать функцию MakeText(), то все работает. Помогите, пожалуйста найти ошибку

рони 03.11.2014 13:36

Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

Alex12320 03.11.2014 13:40

Сделал

MallSerg 03.11.2014 14:30

new ActiveXObject

В браузерах этот код работать не сможет
Актив Х работает только IE и то только древних 8-

kostyanet 03.11.2014 14:32

Это WScript. Запускайте его как программу, двойным щелчком из папки в Винде.

ЗЫ, а, точно, там теги. Короче, все что внутри тега скрипт вырезайте, записывайте в текстовый файл, скажем gen_html.js и запускайте его как екзешник. Если же в хтмле какой-то интерфейс - то ищите браузер который понимает Windows Script, или прописывайте параметры прямо в скрипте.

Это ж позорнота - за годы Микрософт не удосужился обеспечить свой хотя бы самый примитивный интерфейс. В ФШ и то можно прямо в js обрисовать окно, элементы, и работать как с программой.

kostyanet 03.11.2014 14:42

Блин, рассмотрел скрипт - так он просто файлы в теги пихайет? Одуреть.

Скопируйте файлы в... а, у вас какая винда? Так вот в 7 и выше можно копировать имена файлов и вставлять как текст, а для ранешних есть апп - полтора мега - Send To Toys. Копируете файлы и в шаблон екзеля вставляйте. Формула =СЦЕПИТЬ() сцепит теги с текстом - скопируете еще раз и готово.

kostyanet 03.11.2014 14:47

Собственно это весь интерфейс:

Цитата:

Сообщение от Alex12320
var n = window.prompt("Введите путь к корневому файлу", "");

Замените на функцию нормального выбора папки:

function browseForFolder(start) {

	var BIF_returnonlyfsdirs   = 0x0001;
	var BIF_dontgobelowdomain  = 0x0002;
	var BIF_statustext         = 0x0004;
	var BIF_returnfsancestors  = 0x0008;
	var BIF_editbox            = 0x0010;
	var BIF_validate           = 0x0020;
	var BIF_browseforcomputer  = 0x1000;
	var BIF_browseforprinter   = 0x2000;
	var BIF_browseincludefiles = 0x4000;

	var oShell = new ActiveXObject("shell.application");
	var ssfWINDOWS = 36;
	var oFolder = oShell.BrowseForFolder(0, "Example", BIF_returnonlyfsdirs || BIF_browseincludefiles , 17);
	
	if(!oFolder) return null;

	var oItem = oFolder.parentFolder.parseName(oFolder.title);
	if(!oItem) return null;
	
	return [oFolder.title, oItem.Path];
}

Alex12320 03.11.2014 16:01

сделал как вы сказали, нашел опечатку. но все равно ничего не происходит. можно ли отладить код по шагам?
function browseForFolder(start)
? start означает что скрипт исполняется с этой функции? и разве нельзя просто в тексте прописывать пути к файлам? и я не совсем понял как их через ексель вставлять?

kostyanet 04.11.2014 09:42

Применение

var f = browseForFolder(""); // юзер выбрал папку

if(f!=null && f.length>0) {
 // в f[0] == имя папки
 // в f[1] == полный путь к этой папке
}

kostyanet 04.11.2014 09:48

Должно работать

var f=GetWayToFile();
if(f)
 MakeText(f);

function GetWayToFile() {
var f = browseForFolder("");
if(f!=null && f.length>0)
return f[1];
else
return null;
}

function GetHeader()
{
var page = '<html>\n<header>\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n</header>\n';
}
function GetFiles(folderspec ) {

  var fso = new ActiveXObject("Scripting.FileSystemObject");
   var f = fso.GetFolder(folderspec);
   var fc = new Enumerator(f.Files);
   var s = new array(100);
   var num = 0;
   for (; !fc.atEnd(); fc.moveNext())
   {
	s[num] += fc.item();
	num+=1;
	};
   return s;
}
function MakeText(f){
	var PageText = '';
	PageText+= GetHeader();
	var BodyTextStart = '<body>\n';
	var BodyDivText = '';
	var ImgArr = GetFiles(f);
	var BodyTextFinal = '</body>\n</html>';
	var count = 0;
	while (ImgArr[count]<>'')
	{
		BodyDivText = BodyDivText +'<div class = "photo"><img class = "img" src = "' + ImgArr[count]+ '" ></div>\n';
		count++;
	}
	PageText=BodyTextStart+BodyDivText+BodyTextFinal;
	WriteToFile(PageText);
	return 0;
}
function WriteToFile(text)
{
var fso = new ActiveXObject('Scripting.FileSystemObject');
var s = fso.CreateTextFile("C:\\NewFile.html", true);
s.WriteLine(text);
s.WriteLine('***********************');
s.Close();
}


Часовой пояс GMT +3, время: 19:22.