Você certamente conhece os favoritos. A capacidade de favoritar, salvar ou “marcar” páginas da web tem sido um recurso básico do navegador há décadas. No entanto, os navegadores não permitem apenas que você marque páginas da web. Você também pode marcar JavaScript, permitindo fazer muito mais do que apenas salvar páginas.
Um script JavaScript salvo como marcador é chamado de “bookmarklet”, embora algumas pessoas também usem o termo “favelet” ou “favlet”. Os bookmarklets existem desde o final dos anos 90. O site que os cunhou, bookmarklets.comainda permanece por aí hoje. Eles são simples e versáteis, fato evidenciado pela maioria dos bookmarklets listados no site mencionado que ainda funcionam hoje, apesar de permanecerem intocados por mais de duas décadas.
Embora os bookmarklets tenham caído um pouco no esquecimento nos últimos anos, à medida que os navegadores se tornaram mais capazes e as ferramentas de desenvolvimento amadureceram, eles ainda são uma ferramenta valiosa no arsenal de qualquer desenvolvedor web. Eles são simples, mas capazes, e nenhum software adicional é necessário para criá-los ou usá-los. Se você observar qualquer bom maquinista ou engenheiro trabalhando, verá que eles estão constantemente construindo ferramentas e utilitários, até mesmo engenhocas únicas, para resolver problemas ou chegar a uma solução mais elegante enquanto trabalham. Como desenvolvedores, devemos nos esforçar para fazer o mesmo, e os bookmarklets são uma maneira perfeita de facilitar isso.
Fazendo um marcador
Bookmarklets são extremamente fáceis de fazer. Você escreve um script exatamente da mesma maneira que faria se o escrevesse para o console do navegador. Você então salva-o como um marcador, prefixando-o com javascript: que o designa para uso na barra de URL do navegador.
Vamos trabalhar na criação de um bookmarklet super básico, que envia um alerta simples. Pegaremos o código abaixo, que aciona uma mensagem usando o alert() métodoe marque-o como bookmarklet.
alert("Hello, World!");
A seguir, vamos transformá-lo em uma expressão de função imediatamente invocada (IIFE), que traz alguns benefícios. Em primeiro lugar, cria um novo escopo para evitar poluir o namespace global e evita que nosso bookmarklet interfira no JavaScript já existente na página, ou vice-versa. Em segundo lugar, fará com que o bookmarklet seja acionado ao clicar.
Conseguiremos isso colocando-o dentro de uma função anônima (lambda) (por exemplo, (() => {})) e sufixando-o com ();que executará nossa função.
(() => {
alert("Hello, World!");
})();
Para confiabilidade entre navegadores, é benéfico codificar em URL nosso bookmarklet para escapar de caracteres especiais. Sem fazer isso, os navegadores podem dar errado e interpretar mal nosso código. Mesmo que não seja totalmente necessário com um bookmarklet simples como este, ele pode evitar muitos problemas que podem surgir com maior complexidade. Você mesmo pode codificar seu bookmarklet usando JavaScript encodeURIComponent() função, ou você pode usar uma das várias ferramentas existentes. Também o reduziremos a uma única linha.
(()%3D%3E%7Balert(%22Hello%2C%20World!%22)%3B%7D)()%3B
Devemos prefixar javascript: para que nosso navegador saiba que este não é um URL padrão para uma página da web, mas sim um bookmarklet JavaScript.
javascript:(()%3D%3E%7Balert(%22Hello%2C%20World!%22)%3B%7D)()%3B
Instalando um Bookmarklet
Finalmente, devemos adicioná-lo ao nosso navegador como um bookmarklet. Como você pode esperar, isso depende extremamente do navegador que você está usando.
No Safari no macOS, a maneira mais fácil é marcar uma página da web e depois editar esse marcador em um bookmarklet:
No Firefox para desktop, a maneira mais fácil é clicar duas vezes na barra de ferramentas de favoritos e depois em “Adicionar favorito…”:

No Chrome para desktop, a maneira mais fácil é clicar duas vezes na barra de ferramentas de favoritos e depois em “Adicionar página…”:

Muitos navegadores móveis também permitem a criação e uso de marcadores. Isso pode ser especialmente valioso, já que as ferramentas de desenvolvimento de navegador geralmente não estão disponíveis em dispositivos móveis.
Marcadores CSS
Você sem dúvida está olhando para a palavra “JavaScript” acima com um olhar de desdém. Isso é CSS-Tricks afinal. Não tenha medo, porque podemos criar bookmarklets que aplicam CSS à nossa página de várias maneiras.
Meu método favorito, do ponto de vista da autoria, é criar um element with my chosen content:
javascript: (() => {
var style = document.createElement("style");
style.innerHTML = "body{background:#000;color:rebeccapurple}";
document.head.appendChild(style);
})();
A abordagem muito mais elegante é usar o CSSStyleSheet interface. Essa abordagem permite atualizações incrementais e permite acessar diretamente o CSS Object Model (CSSOM) para ler seletores, modificar propriedades existentes, remover ou reordenar regras e inspecionar a estrutura computada. O navegador também valida os valores inseridos dessa forma, o que ajuda a evitar que você insira CSS quebrado. É mais complexo, mas também oferece maior controle.
javascript: (() => {
const sheet = new CSSStyleSheet();
document.adoptedStyleSheets = (...document.adoptedStyleSheets, sheet);
sheet.insertRule("body { border: 5px solid rebeccapurple !important; }", 0);
sheet.insertRule("img { filter: contrast(10); }", 1);
})();
Como estamos escrevendo CSS para uso geral em qualquer página em que desejamos usar nosso bookmarklet, é importante estar ciente de que podemos encontrar problemas de especificidade ou conflitos com as folhas de estilo existentes da página. Usando !important geralmente é considerado um mau cheiro de código, mas no contexto de substituição de estilos existentes desconhecidos, é uma maneira razoável de atender às nossas necessidades.
Limitações
Infelizmente, existem alguns obstáculos que podem impedir o uso de bookmarklets. As mais difundidas são as Políticas de Segurança de Conteúdo (CSP). Um CSP é um recurso de segurança que tenta impedir ações maliciosas, como ataques de script entre sites, permitindo que os sites regulem o que pode ser carregado. Você não gostaria de permitir que scripts fossem executados no site do seu banco, por exemplo. Um bookmarklet que depende de solicitações de origem cruzada (solicitações de fora do site atual) é bloqueado com muita frequência. Por esse motivo, idealmente, um bookmarklet deve ser independente, em vez de depender de algo externo. Se você suspeitar que um bookmarklet está sendo bloqueado pelas políticas de segurança de um site, você pode verificar se há um erro no console das ferramentas de desenvolvedor do seu navegador.

Como os bookmarklets são apenas URLs, não há nenhum limite estrito para o comprimento especificado. No uso, os navegadores impõem limites, embora sejam maiores do que você encontrará na maioria dos casos. Em meus próprios testes (que podem variar de acordo com a versão e plataforma), aqui estão os limites máximos que encontrei: O maior bookmarklet que consegui criar no Firefox e no Safari tinha 65.536 bytes. O Firefox não me permitiu criar um bookmarklet de tamanho maior e o Safari me permitiu criar um bookmarklet, mas não fez nada quando acionado. O maior bookmarklet que consegui criar no Chrome tinha 9999999 caracteres e comecei a ter problemas ao interagir com a caixa de texto depois desse ponto. Se precisar de algo mais longo, você pode considerar carregar um script de um local externo, tendo em mente as limitações do CSP mencionadas acima:
javascript:(() => {
var script=document.createElement('script');
script.src="https://example.com/bookmarklet-script.js";
document.body.appendChild(script);
})();
Caso contrário, você pode considerar uma ferramenta de userscript como TamperMonkeyou, para algo mais avançado, criando sua própria extensão de navegador. Outra opção é criando um snippet nas ferramentas de desenvolvedor do seu navegador. Bookmarklets são melhores para pequenos trechos.
Bookmarklets legais
Agora que você tem uma ideia do que são bookmarklets e, até certo ponto, do que eles são capazes, podemos dar uma olhada em alguns deles úteis. No entanto, antes de fazermos isso, gostaria de enfatizar que você deve ter cuidado ao executar bookmarklets encontrados online. Os bookmarklets que você encontra online são códigos escritos por outra pessoa. Como sempre, você deve ser cauteloso, cauteloso e criterioso. As pessoas podem e escreveram bookmarklets maliciosos que roubam credenciais de contas ou algo pior.
Por esse motivo, se você colar o código começando com javascript: na barra de endereço, os navegadores removem automaticamente o javascript: prefixo para evitar que pessoas acionem bookmarklets involuntariamente. Você precisará reintroduzir o prefixo. Para contornar o javascript: remoção, os bookmarklets são frequentemente distribuídos como links em uma página, que você deve arrastar e soltar em seus favoritos.
Bookmarklets específicos já foram mencionados em CSS-Tricks antes. Dada a evolução dos navegadores e da plataforma web, muito se tornou obsoleto agora, mas alguns artigos mais contemporâneos incluem:
Não deixe de conferir os comentários dessas postagens, pois elas estão repletas de inúmeros bookmarklets excelentes da comunidade. Falando em bookmarklets da comunidade:
Se você tiver algum bookmarklet dourado que considere valioso, compartilhe-o nos comentários.
Deseja saber mais sobre Programação e Desenvolvimento Clique Aqui!
