LINUX.ORG.RU

Чтение текстового файла из JavaScript


0

0

Я делаю файлик html, через который можно будет смотреть видео на YouTube. Идея очень простая.

1. Пишем (вручную) в файлик videos.txt идентификаторы видео с YouTube
2. Запускаем файлик videos.html, который загружает videos.txt в iframe.
3. Скрипт читает имена видео и через document.write формирует страницу превьюшек.

В общем, в FireFox и на localhost всё работает. А с Internet Explorer и с удалённым сервером есть нюансы.

Internet Explorer ругается на innerHTML, более конкретно, на вот эту строчку (Ошибка: требуется Объект):

var VdDt = document.getElementById('videos').contentWindow.document.body.innerHTML;

Удалённо же не грузится вообще ничего, как будто Апач не позволяет прочесть текстовый файлик.

После часа гугленья выяснил, что с innerHTML бывает куча проблем, но все они связаны не со считыванием, а, наоборот, с записью в innerHTML.

Что ещё можно проверить? Или, возможно, есть более простые способы считать файлик из JavaScript?

На всякий случай, вот код целиком:

--- Начало кода ---
<html>
<head>
<title>Видео</title>
<meta http-equiv=«Content-Type» content=«text/html; charset=windows-1251»>
<link rel=«stylesheet» href=«aoa.css» type=«text/css»>
</head>

<body>
<!-- Грузим список видео (из файла videos.txt) -->
<iframe src='videos.txt' name='videos' frameborder='0' width='0' height='0' id='videos'></iframe>

<script type=«text/javascript»>
// Грузим список, удаляем комментарии и лишние строки, нарезаем в массив
var VdDt = document.getElementById('videos').contentWindow.document.body.innerHTML;
VdDt = VdDt.replace(/(<\/?pre>|[ \r])/g, ");
VdDt = VdDt.replace(/(#.*)/g, ").replace(/(.*[^-_\w\n].*)/g, ").replace(/\n(?=\n)/g, ").replace(/((^\n)|(\n$))/g, ");
var VdLst = VdDt.split('\n');

// Выводим видео в две колонки, ширина превьюшек 400х300
document.write('<div align=«center»>\n<div style=«position: relative; width: 900;»>\n');
for (i=0;i<(VdLst.length);i++){
document.write ('<div style=«position: absolute; left: ' + ((i%2)*500) + '; top: ' + (100 + (Math.floor(i/2))*400) + ';»>\n');
document.write ('<object width=«400» height=«300»><param name=«movie» value="http://www.youtube.com/v/' + VdLst[i] +

'&hl=ru_RU&fs=1&«></param><param name=„allowFullScreen“ value=„true“></param><param name=„allowscriptaccess“ value=„always“></param><embed

src=»http://www.youtube.com/v/' + VdLst[i] + '&hl=ru_RU&fs=1&" type=«application/x-shockwave-flash» allowscriptaccess=«always»

allowfullscreen=«true» width=«400» height=«300»></embed></object><br><br>\n\n');
document.write ('</div>');
}
document.write('</div></div>');
</script>

</body>
<html>
--- Конец кода ---


Ответ на: комментарий от friday

Если я правильно понимаю, для XmlHttpRequest нужно ещё и сервер писать? Или можно через него просто файлик прочесть?

Ritz
() автор топика
Ответ на: комментарий от Ritz

>Если я правильно понимаю, для XmlHttpRequest нужно ещё и сервер писать? Или можно через него просто файлик прочесть?

Не обязательно. Положи свой файлик на какой нибудь web-сервер или открывай его локально через file: протокол

ef37 ★★
()
Ответ на: комментарий от ef37

Не даст браузер AJAX'у прочитать локальный файл.

Ибо read('file:///etc/passwd') => send('http://botnet-controller.net') - и целенаправленность брутфорса вырастает в разы. А то и ~/.history можно было бы отослать - иногда там много интересного находится...

Впрочем, это фактически междоменный (межпротокольный) скриптинг, поэтому вполне может срабатывать защита...

Slavaz ★★★★★
()
Ответ на: комментарий от Slavaz

Получается, что на удалённом сервере в принципе не получится получить доступ к содержимому iframe?

Ritz
() автор топика
Ответ на: комментарий от Ritz

Если в iframe страница с другого домена, то не получится. В файрфоксе дополнительно можно отключить междоменную защиту (не в курсе за остальные браузера), но если что случится фишинговое - ССЗБ.

Slavaz ★★★★★
()
Ответ на: комментарий от Slavaz

Так в том-то и дело, что страница с того же домена и даже из той же папки.

Ritz
() автор топика
Ответ на: комментарий от Ritz

XmlHttpRequest, да. Сервер писать? Как это? Сервер уже написан — Apache (или что там). Файлик прочесть можно. Да даже если бы он на другом домене был, всё равно можно было бы извратиться и прочесть. Методики есть.

Wizard_ ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.