2010-05-05 4 views
4

Ok, Это мой первый раз дело серьезно с IFrames, и я не могу показаться, чтобы понять несколько вещей:Чтение содержимого IFrame с помощью JavaScript

Первый пример кода я тестирование с:

<head> 
<script type="text/javascript"> 
function init(){ 
    console.log("IFrame content: " + window.frames['i1'].document.getElementsByTagName('body')[0].innerHTML); 
} 
</script> 
</head> 
<body onload="init();"> 
<iframe name="i1" src="foo.txt"/> 
</body> 

в файл "foo.txt" выглядит следующим образом:

sample text file 

Вопросы:

1) IFrame, как представляется, как HTML-документ, а текст файла фактически является частью тела. Зачем ? Является ли правило IFrame документом HTML. Разве невозможно, чтобы содержимое iframe было просто текстовым?

2) Содержимое файла получает завернуто внутри предварительно тега по некоторым причинам. Почему это так? Это всегда так?

3) Мой метод доступа в javascript работает, но есть ли другая альтернатива? [Родной JS решения, пожалуйста] Если содержание заворачивают в предварительно теге всегда то я на самом деле есть для поиска внутри предварительно тега, а не выполните поиск innerHTML

ответ

4

innerHTML делает не вернуть точное содержимого элемента, его нестандартизированного метод, который возвращает HTML, который эквивалента к реальному содержанию, и в HTML эквивалент обычного текста является <pre>foo...</pre>.

Вы может повезти с innerText собственности ..

+0

+1 для HTML эквивалент обычного текста

foo...
. – Rajat

0

1) iframe, кажется, ведет себя как HTML-документ, а текст файла фактически является частью тела. Зачем ?

Вы используете интерфейс DOM/JS. это будет работать, только если контент обрабатывается как HTML/XML.

0

Вот как браузеры обрабатывают текстовые файлы, потому что они «выглядят лучше» таким образом (не только внутри iframe). Браузеры могут обрабатывать много типов файлов, и неразумно ожидать, что они будут показывать все в необработанном виде, не так ли? Поскольку страницы браузера (и iframes) относятся к презентации, никто не использует iframe для конфигурации или для чтения необработанных данных с диска.

Если вы хотите иметь полный контроль над презентацией, просто измените тип файла на html, и он будет обработан как html. (в частности, он решит проблему «pre»)

Ответит ли это на ваши вопросы?

+0

Я не думаю, что изменение типа файла в html поможет. В моем примере просто был очень простой текст, но если этот текст генерируется пользователями, он потенциально может включать html/javascript внутри. Разрешение на визуализацию, поскольку HTML откроется до CSRF. – Rajat

+0

Можете ли вы объяснить, что вы пытаетесь сделать тогда? –

6

у меня было трудное время получить содержимое TXT файл, который был ЦСИ из фрейма. Это мое решение:

document.getElementById('iframeID').contentWindow.document.body.innerText 
Смежные вопросы