Você pode fazer isso com um URL de dados. Isso inclui todo o documento em uma única string de HTML. Por exemplo, o seguinte HTML:
<html><body>foo</body></html>
pode ser codificado como este:
data:text/html;charset=utf-8,%3Chtml%3E%3Cbody%3Efoo%3C/body%3E%3C/html%3E
e, em seguida, defina como o src
atributo do iframe. Exemplo .
Edit: A outra alternativa é fazer isso com Javascript. É quase certo que essa é a técnica que eu escolheria. Você não pode garantir por quanto tempo um URL de dados o navegador aceitará. A técnica Javascript seria mais ou menos assim:
var iframe = document.getElementById('foo'),
iframedoc = iframe.contentDocument || iframe.contentWindow.document;
iframedoc.body.innerHTML = 'Hello world';
Exemplo
Edit 2 (dezembro de 2017) : use o atributo srcdoc do Html5 , assim como na resposta de Saurabh Chandra Patel , que agora deve ser a resposta aceita! Se você puder detectar o IE / Edge com eficiência , uma dica é usar a biblioteca srcdoc-polyfill apenas para eles e o atributo srcdoc "puro" em todos os navegadores não IE / Edge (verifique caniuse.com para ter certeza).
<iframe srcdoc="<html><body>Hello, <b>world</b>.</body></html>"></iframe>
Blocked a frame with origin "http://localhost" from accessing a cross-origin frame
.innerHTML
navegador, não executará tags de script descendentes. Para obter mais informações, verifique a seção Considerações de segurança da página Element.innerHTML MDN.usar
html5
o novo atributo desrcdoc
(srcdoc-polyfill) DocumentosSuporte ao navegador - testado nos seguintes navegadores:
fonte
De acordo com a W3Schools, o HTML 5 permite que você faça isso usando um novo atributo "srcdoc" , mas o suporte do navegador parece muito limitado.
fonte