开发者

How can I access the plain text loaded in an <iframe> on IE?

I have an <iframe> whose src points to a plain text file (not HTML). The text gets loaded and displayed on s开发者_如何学Ccreen, but seems to be hidden to JavaScript.

In other browsers, iframe.contentWindow.document.body.innerText is enough to get it for you, but IE returns an empty string in that case.

Is there a way that IE can access the text inside the file without involving a server?


You can read this file using XmlHttpRequest. If the browser can read it, so can 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;
}

Call the readFileHttp(fname, callback) using the iframe.src property for the fname parameter. The callback parameter should be a function that does whatever you want with the result.

Something like this:

var myIFrame = document.getElementById('iframeIdGoesHere');
readFileHttp(myIFrame.src, function(result){
    //process the result
});


EDIT based on comment and edit in question:

It might be that body is not available as a js property on the document. You could try:

iframe.contentWindow.document.getElementsByTagName('body')[0].innerText 
  • My original answer (kept only as reference because of the comment):

    You say in a comment that you pull the path from an <input type='file' />. You can use that to upload the file to the server, and then read it using simple file reading mechanisms. (after all, the <input type='file' /> is meant for server uploads...)


Just a shot in the dark, but have you tried the innerHTML property?

Alternatively, the more "proper" way to do this is to request the file directly with XMLHttpRequest.


and

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

?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜