SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
02.01.2025

Como Configurar uma Alternativa Local para Estilos CDN em CSS

Resposta Rápida

Para alternar para um arquivo CSS local em caso de falha do CDN, utilize o atributo onerror na tag <link>. Esse atributo ativa uma função para carregar a folha de estilo local em caso de erro.

<link rel="stylesheet" href="//cdn.exemplo.com/estilo.css" onerror="this.href='estilo-local.css'; this.onerror=null;">

Se o CDN parar de funcionar, onerror imediatamente substitui href por um link para o seu arquivo local, garantindo a continuidade do design. Também é essencial configurar this.onerror=null para evitar novas tentativas de carregar o arquivo caso a versão local também falhe.

Mais sobre onerror — Seu Guardião

Além de alterar href, você pode adicionar dinamicamente outro arquivo CSS usando JavaScript. Isso possibilita um controle mais profundo e permite que você organize mecanismos de fallback para tratamento de erros.

// Função de resgate.
function carregarEstiloAlternativo() {
  var head = document.getElementsByTagName('head')[0];
  var link = document.createElement('link');
  link.rel = 'stylesheet';
  link.href = 'estilo-local.css'; // Ajudante local, sempre pronto para ajudar.
  head.appendChild(link); // Adicionando suporte.
}

var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = '//cdn.exemplo.com/estilo.css'; // Folha de estilo principal em ação.
link.onerror = function() {
  carregarEstiloAlternativo(); // Ops, o arquivo principal falhou! Chamando o suporte!
  this.onerror = null; // Sem mais esperas por ajuda :(
};
document.getElementsByTagName('head')[0].appendChild(link);

Esse script carrega folhas de estilo locais na seção <head> se o CDN parar de responder às solicitações.

Como Determinar o Sucesso do Carregamento

Outra abordagem é criar uma regra de teste em CSS e depois verificar através do JavaScript.

#elementoTesteCSS {
  display: none;
}

...

#elementoTesteCSS {
  display: block; /* Se o CDN funciona, tudo está ótimo, senão, mudamos para o backup */
}

Exemplo de código JavaScript:

window.onload = function() {
  var elementoTeste = document.createElement('div');
  elementoTeste.id = 'elementoTesteCSS';
  document.body.appendChild(elementoTeste);

  if (window.getComputedStyle(elementoTeste).display === 'none') {
    carregarEstiloAlternativo(); // A regra não funcionou, então conectamos a alternativa!
  }
};

Essa abordagem permite verificar a execução da regra específica dos estilos CDN ao carregar a página, contornando o problema do pré-carregamento.

Visualização

Imagine um sistema de segurança para escaladores que sempre garante proteção confiável:

Escalador (🧗‍♂️): Conectado à corda do CDN (🔗)
Sistema de Segurança: Se a corda do CDN (🔗) quebrar...
Opção de Backup (🔒): Uma corda local (💼) fornece segurança para o escalador
🧗‍♂️: Graças ao 🔗 (a opção principal) ou 💼 (o plano de backup), o escalador está sempre seguro

Da mesma forma que uma corda de backup para um escalador, em caso de falha do CDN, um arquivo CSS local garante que o design do seu site permaneça intocado.

Opções de Retorno

Carregamento Rápido do DOM em Caso de Falha do CDN

Se o CDN não estiver respondendo, como evidenciado por verificações de .cssRules ou .rules, anexe dinamicamente recursos locais:

if (!link.sheet || !link.sheet.cssRules.length) {
  // Problema! O CDN falhou. Recursos locais entram em ação!
  carregarEstiloAlternativo();
}

Garantindo uma Experiência de Usuário Estável

  1. Considere as Diferenças entre Navegadores: Teste fallbacks em diferentes navegadores. Alguns podem se comportar de forma diferente no tratamento de erros.

  2. Prepare-se para Condições de Rede Instáveis: Às vezes, os fallbacks podem ser ativados mesmo com uma recuperação rápida da rede. Desenvolva uma estratégia que inclua timeouts e verificações adicionais.

Usando jQuery para Simplificação

Usando jQuery, o código para carregamento dinâmico torna-se mais simples:

$('head').append('<link rel="stylesheet" href="estilo-local.css" type="text/css" />');

No entanto, isso só funcionará se o jQuery estiver disponível localmente ou você tiver certeza de que estará presente.

Recursos Úteis

  1. <link>: O Elemento Link para Recursos Externos - HTML: HyperText Markup Language | MDN — Um guia abrangente do MDN sobre o uso da tag <link>.
  2. Fallbacks para o CDN de JavaScript — Uma explicação visual de David Walsh sobre os princípios por trás da implementação de um CDN tolerante a falhas em JavaScript.
  3. Criando um Service Worker: Um Guia Prático da Smashing Magazine — Exemplos de formas de lidar com problemas de carregamento de recursos necessários para service workers.
  4. Tag HTML link — Um guia detalhado da W3Schools sobre a tag HTML link.

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!