Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.10.2009, 11:20
vadim165
 
Сообщений: n/a

IE7 виснет при чтении жесткого диска
Задача:
Чтение файлов и папок внешнего жесткого диска (1Тб) и подготовка данных для последующей загрузки в MySQL.
На их основе строится дерево папок.
Проблема:
1. Функция wait() не выводит сообщение вначале
2. При выполнении treeDir() подвисает браузер
Вопрос:
1. Как сделать появление сообщения вначале работы?
2. Возможно ли исключить подвисание IE, если да, то как?
Код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=windows-1251">
    <title>test</title>
</head>
<body>
	<script>
var fso = new ActiveXObject("Scripting.FileSystemObject")
function treeDir(dir, arr){
	if(!fso.folderExists(dir)) {
		alert('Путь не найден')
		return false;
	}
    var f = fso.GetFolder(dir);
	if(typeof arr == 'undefined') {
		//arr = [результат, счётчик, уровень, разделитель, папка, диск, корневая папка]
		//папка: 0-Файл, 1-папка с подпапками, 2-папка без подпапок
		var arr = ['', 1, 2, '', 0, document.MyForm.disk.value, document.MyForm.name.value]
		var dirStart = f.name
		var PathStart = dir
	}
	var rezult = ''
	var level = arr[2]
	arr[2]++
	var fc = new Enumerator(f.files);//Файлы
	while (!fc.atEnd()){
		if((fc.item().attributes&4) == 0){
			arr[1]++
			var left = arr[1]
			arr[1]++
			var right = arr[1]
			var DateM = new Date(fc.item().DateLastModified)
			var DateMod = DateM.getYear()+'-'+(DateM.getMonth()+1)+'-'+DateM.getDate()
			rezult += arr[3]+'array(\''+fc.item().Name+'\', '+left+', '+right+', '+level+',0,'+arr[5]+','+fc.item().size+',\''+DateMod+'\')'+"\n"
			arr[3] = ','
		}
		fc.moveNext()
	}
	arr[4] = 2
    fc = new Enumerator(f.SubFolders);//Подпапки
 	while (!fc.atEnd()){
		if((fc.item().attributes&4) == 0){
			arr[1]++
			var SubDirPath = fc.item()
			var left = arr[1]
			var retArr = treeDir(SubDirPath, arr)
			arr[1] = retArr[1] + 1
			var right = arr[1]
			var DateM = new Date(fc.item().DateLastModified)
			var DateMod = DateM.getYear()+'-'+(DateM.getMonth()+1)+'-'+DateM.getDate()
			rezult += arr[0]
			rezult += arr[3]+'array(\''+fc.item().Name+'\', '+left+', '+right+', '+level+','+retArr[4]+','+arr[5]+','+fc.item().size+',\''+DateMod+'\')'+"\n"
			arr[4] = 1
			arr[3] = ','
		}
		fc.moveNext()
	}
	if(typeof PathStart != 'undefined') {
		rezult += arr[3]+'array(\''+arr[6]+'\',1,' + (arr[1] + 1) + ',1,1,'+arr[5]+')'+"\n"
	}
	arr[0] = rezult
	arr[2] = level
	return arr
}
function wait(){
	var waitMess = document.createElement('div')
	var wait = document.createElement('div')
	wait.className = 'wait'
	waitMess.className = 'waitMess'
	waitMess.innerHTML = 'Загрузка данных. Ждите...<br>ИндикаторЗагрузки'
	document.body.insertBefore(waitMess,  document.body.childNodes[0])
	document.body.insertBefore(wait, waitMess)
}
	</script>
    <style>
.waitMess{
	position:absolute;
	width:200px;
	left:49%;
	top:49%;
	text-align: center;
	background-color: #CED0DB;
	border: outset #F3F4F6 3px;
	padding: 10px;
	font-size: 18px;
}
.wait {
	position:absolute;
	filter:alpha(opacity=50);
	width:100%;
	height:97%;
	background-color: #6699FF;
}
	</style>
    <form action="#" method="get" name="MyForm">
    Диск№:<input name="disk" type="text" value="1" style="width:250px; margin-left:52px"><br>
    Путь:<input name="path" id="path" type="text" value="D:" style="width:250px; margin-left:69px""><br>
    Наименование:<input name="name" type="text" value="1 Наименование 01.10.2009" style="width:250px;"><br>
    <input name="test" type="button" value="test"  style="width:100px;margin-left:103px" onClick="
        wait()
        rezult = treeDir(document.MyForm.path.value)
        if(rezult) alert(rezult[0])">
    </form>
</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 02.10.2009, 15:20
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от vadim165
1Тб
Я б тоже завис.

Сообщение от vadim165
Возможно ли исключить подвисание IE, если да, то как?
Разве что разбить работу на несколько этапов и запускать эти этапы с помощью setTimeout.
Ответить с цитированием
  #3 (permalink)  
Старый 02.10.2009, 19:04
vadim165
 
Сообщений: n/a

Спасибо за идею
Сообщение от Kolyaj Посмотреть сообщение
Я б тоже завис.


Разве что разбить работу на несколько этапов и запускать эти этапы с помощью setTimeout.
Интересное предложение. В понедельник попробую. Спасибо за идею.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск