2017-02-24 61 views
0

我需要在网页上使用.txt文件的内容。问题是我不能简单地做到这一点(服务器端的PHP)。我想出了在iframe中打开文本文件然后请求innerHTML/innerText的技巧。事实证明,人们在那里 - 发现以下代码,比我的尝试更干净,在https://zipcon.net/~swhite/docs/computers/browsers/extern_via_iframe.html阅读iframe内容在Chrome下无法正常工作

它在FireFox和IE本地工作,但不在Chrome下。如何使它在Chrome下工作?

function getIframeContentText(frameID) 
{ 
    var elt = document.getElementById(frameID); 
    //alert("getIframeContentText:" + elt); 
    //alert("getIframeContentText Content:" + elt.contentDocument); 

    if(elt.contentDocument) // DOM 
    { 
     var iframe_doc = elt.contentDocument; 
     var range = iframe_doc.createRange(); 

     range.selectNodeContents(iframe_doc.body); 
     return range.toString(); 
    } 
    else    // IE6 
    { 
     var iframe_doc = document.all[frameID].contentWindow.document; 
     //return iframe_doc.body.innerHTML; // gets HTML 
     return iframe_doc.body.outerText; 
    } 
} 
+0

您是否正在尝试阅读跨域iframe或同域iframe?如果您尝试跨域进行,那么单一来源策略会阻止您这样做。 –

+0

同域。更准确地说,我正在桌面上测试它,而不会将文件加载到服务器。 –

回答

0

这是因为在IE处理IFrame及Firefox是differentthan镀铬,因为铬合金的同源策略
使用chrome.exe --user-data-dir="." --disable-web-security

启动浏览器,你必须等待该文档完全,即加载该页面中的所有内容,有可能发生有可能是内部的iFrame的iFrame(用于通用的解决方案)

$(window).load(function() 
     { 
       chromeFrameInitializers(document);//for handling frames and IFrames 

     }); 

     function chromeFrameInitializers(document) 
     { 
      var frame=document.getElementsByTagName("frame"); 
      for(var i=0;i<frame.length;i++) 
       { 
       var subDocFrame=frame[i].contentDocument; 
       //do your stuf 
       chromeFrameInitializers(subDocFrame) 
       } 

      var iFrame=document.getElementsByTagName("iFrame"); 
      for(var i=0;i<iFrame.length;i++) 
       { 
       var subDocIFrame=iFrame[i].contentDocument; 
       //do your stuf 
       chromeFrameInitializers(subDocIFrame) 
       } 
     } 
` 

它处理两个frame和iframe(递归)。为此$(window).load jquery需要