Как я могу получить доступ к простому тексту, загруженному в <iframe>в IE? - PullRequest
3 голосов
/ 24 августа 2010

У меня есть <iframe>, src которого указывает на простой текстовый файл (не HTML). Текст загружается и отображается на экране, но кажется скрытым для JavaScript.

В других браузерах, iframe.contentWindow.document.body.innerText достаточно, чтобы получить его для вас, но в этом случае IE возвращает пустую строку.

Есть ли способ, которым IE может получить доступ к тексту внутри файла без участия сервера?

Ответы [ 4 ]

1 голос
/ 03 сентября 2010

Вы можете прочитать этот файл, используя XmlHttpRequest. Если браузер может его прочитать, то может XmlHttpRequest.

/* Read a file  using xmlhttprequest 

If the HTML file with your javascript app has been saved to disk, 
this is an easy way to read in a data file.  Writing out is 
more complicated and requires either an ActiveX object (IE) 
or XPCOM (Mozilla).

fname - relative path to the file
callback - function to call with file text
*/
function readFileHttp(fname, callback) {
   xmlhttp = getXmlHttp();
   xmlhttp.onreadystatechange = function() {
      if (xmlhttp.readyState==4) { 
          callback(xmlhttp.responseText); 
      }
   }
   xmlhttp.open("GET", fname, true);
   xmlhttp.send(null);
}

/*
Return a cross-browser xmlhttp request object
*/
function getXmlHttp() {
   if (window.XMLHttpRequest) {
      xmlhttp=new XMLHttpRequest();
   } else if (window.ActiveXObject) {
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
   if (xmlhttp == null) {
      alert("Your browser does not support XMLHTTP.");
   }
   return xmlhttp;
}

Вызовите readFileHttp(fname, callback), используя свойство iframe.src для параметра fname. Параметр обратного вызова должен быть функцией, которая делает с результатом все, что вы хотите.

Примерно так:

var myIFrame = document.getElementById('iframeIdGoesHere');
readFileHttp(myIFrame.src, function(result){
    //process the result
});
0 голосов
/ 03 сентября 2010

и

window.frames[0].document.getElementsByTagName("body")[0].innerHTML

?

0 голосов
/ 03 сентября 2010

РЕДАКТИРОВАТЬ на основе комментария и редактирования вопроса:

Возможно, что body недоступно в качестве свойства js в документе.Вы можете попробовать:

iframe.contentWindow.document.getElementsByTagName('body')[0].innerText 
  • Мой оригинальный ответ (сохраняется только в качестве ссылки из-за комментария):

    В комментарии вы говорите, что извлекаете путь из <input type='file' />.Вы можете использовать это, чтобы загрузить файл на сервер, а затем прочитать его, используя простые механизмы чтения файлов.(в конце концов, <input type='file' /> предназначен для загрузки на сервер ...)

0 голосов
/ 24 августа 2010

Просто выстрел в темноте, но вы пробовали свойство innerHTML?

В качестве альтернативы, более «правильный» способ сделать это - запросить файл напрямую через XMLHttpRequest.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...