2011-06-06 52 views
0

我在iframe中遇到了麻烦。我试图动态创建iframe,并根据用户选择将其src属性分配给适当的文件。我使用内嵌JavaScript创建了一个简单的html页面,它重现了这个问题。IE iframe和unicode文本

<html> 
    <head> 
    <script type="text/javascript"> 
     function createIFrame(){ 
     var iframe = document.createElement('iframe'); 
     document.body.appendChild(iframe); 
     iframe.id = "myframe"; 
     } 

     function loadFile(fileName){ 
     var frame = document.getElementById("myframe"); 
     frame.src = fileName; 
     } 
    </script> 
    </head> 
    <body> 
    <input type="button" value="create iframe" onclick="createIFrame()" /> 
    <input type="button" value="load ansi" onclick="loadFile('ansi.txt')" /> 
    <input type="button" value="load unicode" onclick="loadFile('unic.txt')" /> 
    <hr/> 
    <iframe id="workingFrame" src="unic.txt"></iframe> 
    </body> 
</html> 

ansi.txt - 以ANSI编码保存的文本文件,unic.txt是unicode文本文件。

按下创建按钮iframe被添加到DOM。如果按下“加载ansi”按钮,文件内容将无任何问题加载到iframe中,但“加载unicode”按钮会导致问题 - iframe保持空白。

但是,如果src属性最初定义为'workingFrame',则unicode文件加载正确。这个问题发生在IE 8中,IE 9建议下载文件而不是渲染它。我需要在iframe中呈现文件内容。

回答

0

我试过你的例子在ie 8和9,它的工作完美。你有没有尝试过你自己的示例HTML页面,或只是你的实际代码?

PS - 抱歉张贴这作为一个答案,我没有评论privledges尚未

+0

谢谢您的回复。是的,我已经在几台PC上运行Windows 7的IIS 7下自己尝试过了。问题是可重现的。我用Windows记事本创建了文本文件,改变了它的编码保存选项。 – 2011-06-06 18:39:33

+0

好吧,我得到它在ie9&8中重现错误,我错过了用记事本编码文件的部分。 – AsherMaximum 2011-06-06 21:05:44

+0

尽管如此,在ie9中,即使在最初定义的iframe中也不会加载它。通过将文件扩展名更改为.html,我确实可以在ie9和8中使用它。我猜这对你来说可能不是一个可行的选择。 – AsherMaximum 2011-06-06 21:07:23

0

是您的服务器上的此响应发送什么MIME类型? Content-Type HTTP头指定了什么CHARSET?

如果你发送text/html而不是text/plain,我敢打赌这个工作没有错误。

+0

是的,你是对的。将内容类型标题更改为“text/html”解决了一个问题,但产生了另一个问题 - 文本格式丢失。 – 2011-06-07 07:29:02

+0

不幸的是,这种问题解决方案不适用于我,因为我没有访问生产服务器的问题,应该在客户端部分解决问题。关于这个问题 - 我注意到IE将文件内容加载到iframe,它可以通过iframe.contentWindow.document.body.innerHTML访问,但不会显示。并且iframe.readyState属性不会转为“完整”,它始终对于unicode文件是“交互式”的。 – 2011-06-07 07:50:27