Открытие локальных файлов javascript-ом

anchar

Новичок
Открытие локальных файлов javascript-ом

Мне нужно прочитать содержимое файла xml из файла html с помощью javascript-а. Проблема в том что файлы распологаются локально, т.е. не на сервере, а просто лежат в какой-то папке.
Существует ли такая возможность (без использования ActiveX) ?
 

anchar

Новичок
Оказывается можно:
// most current browsers support document.implementation
if (document.implementation && document.implementation.createDocument)
{
xmlDoc = document.implementation.createDocument("", "", null);
xmlDoc.load("db.xml");
}
// MSIE uses ActiveX
else if (window.ActiveXObject)
{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
xmlDoc.load("db.xml");
}
 

neko

tеam neko
это не называется "без использования ActiveX"
ну и годится только для IE.

а так да, "можно".
 

anchar

Новичок
Вот эта часть:

if (document.implementation && document.implementation.createDocument)
{
xmlDoc = document.implementation.createDocument("", "", null);
xmlDoc.load("db.xml");
}

специально для остальныx браузеров, кроме IE
 

Crazy

Developer
anchar, сынок, сказки будешь в другом месте рессказывать. Твой код будет загружать db.xml из того же каталога HTTP-сервера, из которого загружена страница, а вовсе не с локального диска.
 

anchar

Новичок
Автор оригинала: Crazy
anchar, сынок, сказки будешь в другом месте рессказывать. Твой код будет загружать db.xml из того же каталога HTTP-сервера, из которого загружена страница, а вовсе не с локального диска.
Не знаешь, лучше помолчи.
Чтобы удостоверитсья, сохрани это в db.xml

PHP:
<?xml version="1.0" encoding="windows-1251"?>
<database>
<item><name>Евгений Онегин</name><auther>Пушкин</auther><pub>Москва</pub><cost>144</cost></item>
<item><name>Преступление и наказание</name><auther>Достоевский</auther><pub>Калуга</pub><cost>235</cost></item>
<item><name>Война и мир</name><auther>Толстой</auther><pub>Казань</pub><cost>195</cost></item>
</database>
А это в db.html
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Поиск</title>
<style>
.item_info {
	background-color:#CCCCCC;
	margin:5px;
	padding:5px;
}
</style>
<script language="JavaScript">
<!--

value_array = new Array();

window.onload = function()
{
	loadIndex();
}

function loadIndex() { // load indexfile
// most current browsers support document.implementation
	if (document.implementation && document.implementation.createDocument) {
		xmlDoc = document.implementation.createDocument("", "", null);
		xmlDoc.load("db.xml");
	}
// MSIE uses ActiveX
	else if (window.ActiveXObject) {
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async = "false";
		xmlDoc.load("db.xml");
	}
}

function parseXMLDB()
{
	var xRows = xmlDoc.getElementsByTagName('item');	
	for(i=0; i<xRows.length; i++)
	{
		var new_array = new Array();
		new_array[0] = xRows[i].childNodes[0].firstChild.nodeValue;
		new_array[1] = xRows[i].childNodes[1].firstChild.nodeValue;
		new_array[2] = xRows[i].childNodes[2].firstChild.nodeValue;
		new_array[3] = xRows[i].childNodes[3].firstChild.nodeValue;
		value_array[i] = new_array;
	}
}

function ShowValue()
{
	if (value_array.length==0)
	{
		parseXMLDB(xmlDoc, value_array);
	}
	var display_box = document.getElementById('display_box');
	display_box.innerHTML = "";
	for(i=0; i<value_array.length; i++)
	{
		var item_info = document.createElement("DIV");
		item_info.className = "item_info";
		item_info.innerHTML = "Название: "+value_array[i][0]+"<br />Автор: "+value_array[i][1]+"<br />Город: "+value_array[i][2]+"<br />Цена: "+value_array[i][3];
		display_box.appendChild(item_info);
	}
}
function FilterValue()
{
	if (value_array.length==0)
	{
		parseXMLDB(xmlDoc, value_array);
	}
	var display_box = document.getElementById('display_box');
	display_box.innerHTML = "";
	var form = document.filter;
	for(i=0; i<value_array.length; i++)
	{
		if (value_array[i][0].match(new RegExp(form.name.value,"i")) && 
			value_array[i][1].match(new RegExp(form.auther.value,"i")) && 
			value_array[i][2].match(new RegExp(form.pub.value,"i")) && 
			value_array[i][3].match(new RegExp(form.cost.value,"i")))
		{
			var item_info = document.createElement("DIV");
			item_info.className = "item_info";
			item_info.innerHTML = "Название: "+value_array[i][0]+"<br />Автор: "+value_array[i][1]+"<br />Город: "+value_array[i][2]+"<br />Цена: "+value_array[i][3];
			display_box.appendChild(item_info);
		}
	}
	if (display_box.innerHTML == "")
		display_box.innerHTML = "Ничего не найдено";
}
//-->
</script> 
</head>

<body>
<form id="loadxml" name="loadxml">
    <input type="button" name="load" onclick="javascript: ShowValue();" value="Показать все" />
</form>
<form id="filter" name="filter">
<table border="0">
    <tr>
        <td>Название: </td>
        <td><input type="text" name="name" value="" onkeyup="javascript: FilterValue();" /></td>
    </tr>
    <tr>
        <td>Автор: </td>
        <td><input type="text" name="auther" value="" onkeyup="javascript: FilterValue();" /></td>
    </tr>
    <tr>
        <td>Город: </td>
        <td><input type="text" name="pub" value="" onkeyup="javascript: FilterValue();" /></td>
    </tr>
    <tr>
        <td>Цена: </td>
        <td><input type="text" name="cost" value="" onkeyup="javascript: FilterValue();" /></td>
    </tr>
</table>
</form>
<div id="display_box" style="border:1px dotted #000000; padding:5px">Ничего не найдено</div>
</body>
</html>
И запусти из локального каталога
Собственно все, спорить больше не собираюсь
 

neko

tеam neko
> И запусти из локального каталога

собственно об этом и речь
если надо что-то такое на своем собственном комьютере делать, то не вопрос
 

neko

tеam neko
речь о том, что и сама страница тоже локально должна находиться.
если я ничего не путаю.

т.к. стандартные настройки безопасности в браузерах разрешают трогать локальные файлы только вот при таких условиях.

и после того как у тебя вообще все локально, непонятно зачем этот javascript вообще нужен.

-~{}~ 16.06.07 01:07:

а если она будет не локально случится то, о чем выше Crazy написал.
 

anchar

Новичок
Автор оригинала: neko
и после того как у тебя вообще все локально, непонятно зачем этот javascript вообще нужен.
Например чтобы запустить этот файл с компакт-диска
 

Crazy

Developer
anchar, перечитай внимательно -- глазами -- свое первое сообщение. Там нигде не сказано, что страница открывается с компакта.
 

anchar

Новичок
Какая разница откуда открывается?? Главное что не с сервера, а об этом в первом сообщении как раз и сказано!
 

Crazy

Developer
Нука-нука, где в первом сообщении сказано, что страница открывается не с сервера?

Мне нужно прочитать содержимое файла xml из файла html с помощью javascript-а. Проблема в том что файлы распологаются локально, т.е. не на сервере, а просто лежат в какой-то папке.
 

dimagolov

Новичок
anchar, формулируй яснее. Те кто не в танке те и так знают, что скрипт обращаться к СВОЕМУ локалу может. То есть если он на сервере, то к серверу, если он на диске, то на диск. Ты сформулировал, что есть проблема - и твоя ремарка про файлы локально воспринята "скрипт загрузили откуда-то, а им хотим трогать локальные файлы юзара". Потому что в иных случаях проблемы нету.
 

Crazy

Developer
Пациент неизлечим. Мы все, разумеется, виноваты в том, что он не умеет задавать осмысленные вопросы.
 
Сверху