好的,这是我第一次认真对待IFrame,我似乎无法理解一些事情:
首先是我测试的示例代码:
<head>
<script type="text/javascript">
function init(){
console.log("IFrame content: " + window.frames['i1'].document.getElementsByTagName('body')[0].innerHTML);
}
</script>
</head>
<body onload="init();">
<iframe name="i1" src="foo.txt"/>
</body>
文件“foo.txt”如下所示:
sample text file
问题:
1)iframe似乎表现为HTML文档,文件文本实际上是身体的一部分。为什么? IFrame是否是HTML文档的规则。 iframe的内容不可能只是纯文本吗?
2)由于某种原因,文件内容被包装在 pre 标记内。为什么会这样?总是这样吗?
3)我在javascript中的访问方法正在运行,但还有其他选择吗? [原生js解决方案请]如果内容总是包含在 pre 标记中,那么我实际上必须在 pre 中查找标记而不是查找 innerHTML
答案 0 :(得分:6)
我很难获得作为iframe的src的TXT文件的内容。 这是我的解决方案:
document.getElementById( 'iframeID' ).contentWindow.document.body.innerText
答案 1 :(得分:4)
innerHTML
不会返回元素的完全内容,它是一个非标准化方法,返回等效的对于真实内容,在HTML中,与纯文本相同的是<pre>foo...</pre>
。
innerText属性可能会更好运。
答案 2 :(得分:0)
1)iframe似乎表现为HTML文档,文件文本实际上是身体的一部分。为什么?
您正在使用DOM / JS界面。只有将内容视为HTML / XML时,这才有效。
答案 3 :(得分:0)
这就是浏览器如何处理文本文件,因为它们看起来更好'(不仅仅是iframe内部)。浏览器可以处理很多文件类型,期望它们以原始形式显示所有内容是不合理的,对吗?因为浏览器页面(和iframe)是关于表示的,所以没有人真正使用iframe进行配置或从磁盘读取原始数据。
如果您想完全控制演示文稿,只需将文件类型更改为html,它将被视为html。 (特别是,它将解决'pre'问题)
这会回答你的问题吗?