Eu tenho 2 arquivos HTML, suponha a.html
e b.html
. Em a.html
eu quero incluir b.html
.
No JSF eu posso fazer assim:
<ui:include src="b.xhtml" />
Isso significa que dentro do a.xhtml
arquivo, eu posso incluir b.xhtml
.
Como podemos fazer isso em *.html
arquivo?
javascript
html
include
lolo
fonte
fonte
localhost
: stackoverflow.com/questions/7542872/…Respostas:
Na minha opinião, a melhor solução usa jQuery:
a.html
:b.html
:Este método é uma solução simples e limpa para o meu problema.
A
.load()
documentação do jQuery está aqui .fonte
$(function(){})
será executado somente após o carregamento do documento.XMLHttpRequest cannot load file:///.../b.html. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.
Expandindo a resposta de lolo a partir de cima, aqui está um pouco mais de automação se você precisar incluir muitos arquivos:
E depois incluir algo no html:
O que incluiria as visualizações de arquivo / header.html e views / footer.html
fonte
data-argument
e recuperá-lo no arquivo incluído?$("#postdiv").load('posts.php?name=Test&age=25');
class="include"
- basta fazer o seu seletor jQuery #var includes = $('[data-include]');
Minha solução é semelhante à do lolo acima. No entanto, insiro o código HTML via document.write do JavaScript, em vez de usar o jQuery:
a.html:
b.js:
O motivo para não usar o jQuery é que o jQuery.js tem aproximadamente 90kb de tamanho e quero manter a quantidade de dados a carregar o menor possível.
Para obter o arquivo JavaScript com escape apropriado sem muito trabalho, você pode usar o seguinte comando sed:
Ou simplesmente use o seguinte script bash publicado como um Gist no Github, que automatiza todo o trabalho necessário, convertendo
b.html
parab.js
: https://gist.github.com/Tafkadasoh/334881e18cbb7fc2a5c033bfa03f6ee6Créditos a Greg Minshall pelo melhor comando sed que também escapa barras e aspas simples, que o meu comando sed original não considerou.
Como alternativa, para navegadores que suportam literais de modelo, o seguinte também funciona:
b.js:
fonte
'
marcas. Se você apenas encontrar / substituir para substituir` with
\ `ENTÃO, encontrar / substituir para substituir'
por\'
e novas linhas com` `novas linhas, funcionará bem.`
- então você é capaz de inserir expressões como${var}
- então você só precisa escapar\`
e\$
Importação de HTML5 do checkout via tutorial Html5rocks e no projeto-polímero
Por exemplo:
fonte
stuff.html
disponibilizado apenas como modelo na página pai, mas você precisa usar scripts para criar clones de seu DOM na página pai, para que fiquem visíveis para o usuário.TypeError: ... .import is undefined
. O MDN diz que "esse recurso não está implementado em nenhum navegador nativo no momento". Alguém sabe se é possível criar FF com esse recurso?Plug vergonhoso de uma biblioteca que eu escrevi a resolver isso.
https://github.com/LexmarkWeb/csi.js
O texto acima pega o conteúdo
/path/to/include.html
e o substituidiv
por ele.fonte
<div data-include="/path/to/include.html"></div>
. Essa ferramenta facilita a criação de uma maquete simples de várias páginas sem plug-ins de maneira limpa.Uma diretiva de inclusão simples do lado do servidor para incluir outro arquivo encontrado na mesma pasta é assim:
fonte
<!--#include file="a.html" -->
tambémNão há necessidade de scripts. Não há necessidade de fazer coisas sofisticadas do lado do servidor (que provavelmente seria uma opção melhor)
Como os navegadores antigos não oferecem suporte contínuo, você deve adicionar alguns css para corrigi-lo:
Lembre-se de que, para navegadores que não oferecem suporte contínuo, se você clicar em um link no iframe, o quadro será direcionado para esse URL, não para a janela inteira. Uma maneira de contornar isso é ter todos os links
target="_parent"
, embora o suporte ao navegador seja "bom o suficiente".fonte
seamless
atributo foi removido do rascunho HTML de onde veio. Não use.Uma solução muito antiga que atendi às minhas necessidades naquela época, mas eis como fazer isso em conformidade com o código:
fonte
<object>
,<embed>
e<iframe>
todos trabalham para isso, mas nos três casos eles criam documentos separados com seus próprios contextos de estilo e script (iframe inclui particularmente bordas e barras de rolagem feias) e, por exemplo, qualquer link por padrão é aberto dentro deles e não no página pai (embora isso possa ser substituído por target = "_ parent"). De tudo isso, o iframe é o único que tem alguma esperança de se tornar mais integrado por meio doseamless
atributo HTML5 (mencionado por bjb568), mas ainda não é bem suportado: caniuse.com/#feat=iframe-seamlessseamless
atributo) é a única parte desatualizada - o restante ainda se aplica.Como alternativa, se você tiver acesso ao arquivo .htaccess no seu servidor, poderá adicionar uma diretiva simples que permita que o php seja interpretado nos arquivos que terminam na extensão .html.
Agora você pode usar um script php simples para incluir outros arquivos, como:
fonte
.htaccess
pode fazer com que ashtml
páginas tentem fazer o download como arquivos, em vez de visualizar no navegador. Teste primeiro. Isenção de responsabilidade: Isso aconteceu comigo agora quando tentei a solução acima. Meu.htaccess
estava vazio, exceto por duas linhas acima. Cuidado recomendado. Tentelolo
a solução jQuery (abaixo).A seguir, funciona se o conteúdo html de algum arquivo precisar ser incluído: Por exemplo, a linha a seguir incluirá o conteúdo de piece_to_include.html no local em que a definição OBJECT ocorre.
Referência: http://www.w3.org/TR/WD-html40-970708/struct/includes.html#h-7.7.4
fonte
Aqui está a minha solução no local:
fonte
No w3.js, inclua trabalhos como este:
Para obter uma descrição adequada, consulte: https://www.w3schools.com/howto/howto_html_include.asp
fonte
Foi isso que me ajudou. Para adicionar um bloco de código html de
b.html
paraa.html
, isso deve ir para ahead
tag dea.html
:Em seguida, na tag body, um contêiner é criado com um ID exclusivo e um bloco javascript para carregá-
b.html
lo no contêiner, da seguinte maneira:fonte
Eu sei que este é um post muito antigo, então alguns métodos não estavam disponíveis na época. Mas aqui está minha opinião muito simples (com base na resposta de Lolo).
Ele se baseia nos atributos data- * do HTML5 e, portanto, é muito genérico, pois usa a função for-each do jQuery para obter todas as classes correspondentes a "load-html" e usa seu respectivo atributo 'data-source' para carregar o conteúdo:
fonte
Você pode usar um polyfill de importações de HTML ( https://www.html5rocks.com/en/tutorials/webcomponents/imports/ ) ou essa solução simplificada https://github.com/dsheiko/html-import
Por exemplo, na página você importa um bloco HTML assim:
O bloco pode ter importações próprias:
O importador substitui a diretiva pelo HTML carregado, praticamente como o SSI
Essas diretivas serão veiculadas automaticamente assim que você carregar este pequeno JavaScript:
Ele processará as importações quando o DOM estiver pronto automaticamente. Além disso, expõe uma API que você pode usar para executar manualmente, obter logs e assim por diante. Desfrutar :)
fonte
script async src
que parece. Experimentando!A maioria das soluções funciona, mas elas têm problemas com o jquery :
O problema é seguir
$(document).ready(function () { alert($("#includedContent").text()); }
nada de alertas de código, em vez de alertar o conteúdo incluído.Eu escrevo o código abaixo, na minha solução, você pode acessar o conteúdo incluído na
$(document).ready
função:(A chave está carregando o conteúdo incluído de forma síncrona).
index.htm :
include.inc :
jquery inclui plugin no github
fonte
Para inserir o conteúdo do arquivo nomeado:
fonte
A resposta do Athari (a primeira!) Foi muito conclusiva! Muito bom!
Mas se você deseja passar o nome da página a ser incluída como parâmetro de URL , esta postagem possui uma solução muito boa para ser usada combinada com:
http://www.jquerybyexample.net/2012/06/get-url-parameters-using-jquery.html
Então, torna-se algo assim:
O seu URL:
O código a.html agora se torna:
Funcionou muito bem para mim! Espero ter ajudado :)
fonte
html5rocks.com tem um tutorial muito bom sobre esse assunto, e isso pode ser um pouco tarde, mas eu mesmo não sabia que isso existia. O w3schools também tem uma maneira de fazer isso usando sua nova biblioteca chamada w3.js. O fato é que isso requer o uso de um servidor da web e um objeto HTTPRequest. Você não pode carregá-los localmente e testá-los em sua máquina. O que você pode fazer é usar os polyfills fornecidos no link html5rocks na parte superior ou seguir o tutorial. Com um pouco de magia JS, você pode fazer algo assim:
Isso criará o link (pode mudar para ser o elemento de link desejado, se já estiver definido), definir a importação (a menos que você já o tenha) e depois anexá-lo. A partir daí, ele pega e analisa o arquivo em HTML e depois o anexa ao elemento desejado em uma div. Tudo isso pode ser alterado para atender às suas necessidades, do elemento anexado ao link que você está usando. Espero que isso tenha ajudado, pode ser irrelevante agora se novas e mais rápidas formas surgirem sem o uso de bibliotecas e estruturas como jQuery ou W3.js.
UPDATE: Isso gerará um erro dizendo que a importação local foi bloqueada pela política do CORS. Pode ser necessário acessar a deep web para poder usá-la devido às propriedades da deep web. (Significando nenhum uso prático)
fonte
Aqui está minha abordagem usando a API Fetch e a função assíncrona
fonte
Por enquanto, não há solução HTML direta para a tarefa. Mesmo as importações de HTML (que estão permanentemente em rascunho ) não farão isso, porque Import! = Include e alguma mágica de JS serão necessárias de qualquer maneira.
Eu escrevi recentemente um script VanillaJS que é apenas para incluir HTML no HTML, sem complicações.
Basta colocar no seu
a.html
É
open-source
e pode dar uma ideia (espero)fonte
Você pode fazer isso com a biblioteca jQuery do JavaScript, assim:
HTML:
JS:
Observe que
banner.html
deve estar localizado no mesmo domínio em que as outras páginas estão; caso contrário, suas páginas da Web recusarão obanner.html
arquivo devido às políticas de compartilhamento de recursos de várias origens.Além disso, observe que, se você carregar seu conteúdo com JavaScript, o Google não poderá indexá-lo, por isso não é exatamente um bom método por razões de SEO.
fonte
Você tentou uma injeção de iFrame?
Ele injeta o iFrame no documento e se exclui (deveria estar no HTML DOM)
<iframe src="header.html" onload="this.before((this.contentDocument.body||this.contentDocument).children[0]);this.remove()"></iframe>
Saudações
fonte
Cheguei a esse tópico procurando algo semelhante, mas um pouco diferente do problema apresentado por lolo. Eu queria construir uma página HTML contendo um menu alfabético de links para outras páginas, e cada uma das outras páginas pode ou não existir, e a ordem em que foram criadas pode não ser alfabética (nem mesmo numérica). Além disso, como o Tafkadasoh, eu não queria inchar a página da web com o jQuery. Depois de pesquisar o problema e experimentar por várias horas, eis o que funcionou para mim, com comentários relevantes adicionados:
fonte
Aqui está um ótimo artigo : Você pode implementar uma biblioteca comum e apenas usar o código abaixo para importar qualquer arquivo HTML em uma linha.
Você também pode experimentar o Google Polymer
fonte
Usando backticks ES6 ``: literais de modelo !
Dessa forma, podemos incluir html sem aspas de codificação, incluir variáveis do DOM e assim por diante.
É um mecanismo de modelagem poderoso, podemos usar arquivos js separados e usar eventos para carregar o conteúdo no local ou até separar tudo em partes e chamar sob demanda:
https://caniuse.com/#feat=template-literals
fonte
javascript
distintivo como programador de hobby até então.Para que o Solution funcione, é necessário incluir o arquivo csi.min.js, que você pode localizar aqui .
Conforme o exemplo mostrado no GitHub, para usar esta biblioteca, você deve incluir o arquivo csi.js no cabeçalho da página e adicionar o atributo data-include com seu valor definido no arquivo que você deseja incluir no contêiner elemento.
Ocultar código de cópia
... espero que ajude.
fonte
PHP é uma linguagem de script no nível do servidor. Pode fazer muitas coisas, mas um uso popular é incluir documentos HTML em suas páginas, da mesma forma que o SSI. Como o SSI, essa é uma tecnologia no nível do servidor. Se você não tiver certeza se possui a funcionalidade PHP no seu site, entre em contato com o seu provedor de hospedagem.
Aqui está um script PHP simples que você pode usar para incluir um trecho de HTML em qualquer página da Web habilitada para PHP:
Salve o HTML dos elementos comuns do seu site para separar arquivos. Por exemplo, sua seção de navegação pode ser salva como navigation.html ou navigation.php. Use o seguinte código PHP para incluir esse HTML em cada página.
Use o mesmo código em todas as páginas em que você deseja incluir o arquivo. Certifique-se de alterar o nome do arquivo destacado para o nome e o caminho para o arquivo de inclusão.
fonte
Se você usa alguma estrutura como django / bootle, eles costumam enviar algum mecanismo de modelo. Digamos que você use bottle, e o mecanismo de modelo padrão é o SimpleTemplate Engine . E abaixo está o arquivo html puro
Você pode incluir o rodapé.tpl no arquivo principal, como:
Além disso, você também pode passar parâmetros para o seu dashborard.tpl.
fonte
Com base na resposta de https://stackoverflow.com/a/31837264/4360308 , implementei essa funcionalidade com o Nodejs (+ express + cheerio) da seguinte maneira:
HTML (index.html)
JS
acrescentar -> inclui o conteúdo na div
substituir -> substitui a div
você poderia facilmente adicionar mais comportamentos seguindo o mesmo design
fonte