阅读iframe内容在Chrome下无效

时间:2017-02-24 12:27:55

标签: javascript google-chrome

我需要在网页上使用.txt文件的内容。问题是我无法轻松实现(服务器端php)。我想出了在iframe中打开文本文件然后要求innerHTML / innerText的技巧。事实证明以前有人在那里 - 发现以下代码,比我的尝试更清晰,https://zipcon.net/~swhite/docs/computers/browsers/extern_via_iframe.html

它在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;
    }
}

1 个答案:

答案 0 :(得分:0)

这是因为处理ie和firefox中的iFrames与chrome不同,因为chromes同源策略
使用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)
                }
        }
`

它处理帧和iFrame(递归)。为此$(window).load需要jquery