2017-02-24 50 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需要

相關問題