指定一个iframe的内容而不是一个页面的src
我目前正在处理一个窗体,除了表单的所有常规字段之外,还有文件input来上传图片,然后将图片提交给iframe,然后将上传的图片加载到要修改字段的表单中对他们来说(比如名字和地理定位)。 由于我不能嵌套窗体,file_input也包含在一个iframe中,所以最终我在iframe中使用了一个iframe。 所以示意图中,我有这样的东西:
<form> <!-- LOTS OF FIELDS!! --> <iframe src="file_input_url"> <!-- iframe which loads a page of a form with a file input--> </iframe> </form>
和在iframe中加载的HTML是类似的(忽略HTML,头和身体标签)
<form target="upload_iframe"> <input type="file" onchange="this.form.submit()"> </form> <iframe name="upload_iframe"></iframe>
这很好,除了加载第一个iframe需要几秒钟,所以文件input不会加载页面的其余部分,并且在视觉上不是理想的。 我可以解决这个问题,如果可以指定iframe内容而不需要加载另一个页面(由第一个iframe中的'file_input_url'指定)。
所以,我的问题是,有没有办法在同一个文档中指定iframe内容,还是只能用src属性来指定,所以需要加载另一个页面?
您可以将内容写入iframe文档。 例:
<iframe id="FileFrame" src="about:blank"></iframe> <script type="text/javascript"> var doc = document.getElementById('FileFrame').contentWindow.document; doc.open(); doc.write('<html><head><title></title></head><body>Hello world.</body></html>'); doc.close(); </script>
iframe现在支持srcdoc ,它可以用来指定要在内联框架中显示的页面的HTML内容。
你可以在src
使用data:
URL:
var html = 'Hello from <img src="http://stackoverflow.com/favicon.ico" alt="SO">'; var iframe = document.querySelector('iframe'); iframe.src = 'data:text/html,' + encodeURIComponent(html);
<iframe></iframe>
结合Guffa所描述的,您可以使用<script type =“text / template”> … </ script>的解释中描述的技术将HTML文档存储在特殊的script
元素中(请参阅链接以获取解释这是如何工作的)。 这比将HTML文档存储在string中容易得多。