Executando verificação de segurança...
18

Como eu criei uma extensão para o Google Chrome para salvar posts do TabNews

Sempre tive a vontade de saber como era desenvolvida uma extensão para o Google Chrome, porém, nunca tive ideias que achei interessantes o suficiente para criar uma extensão, até agora.

Pode ser algo proposital, mas o TabNews não possui uma opção de salvar posts para ver em outro momento, então resolvi tentar implementar essa funcionalidade com uma extensão.

Como funciona?

A ideia é ser algo simples, com apenas uma lista com os posts que foram salvos e um botão para adicionar um post quando estiver na página dele.

Ou seja, você entra no TabNews normalmente, assim que encontrar um post que chame sua anteção e queira salvar para depois, basta entrar nele e clicar no ícone da extensão, assim surgiria um botão para você conseguir salvar aquele post.

Pesquisando como criar a extensão.

Basicamente eu utilizei a documentação do próprio Google para entender como funciona a criação de uma extensão.

Então meu primeiro passo foi criar um arquivo para guardar as informações da extensão, o tal manifest.json e ele ficou com essa cara:

{
  "name": "TabNews Save",
  "description": "Salve os posts do TabNews para ler mais tarde.",
  "version": "1.0.0",
  "manifest_version": 3,
  "permissions": ["activeTab", "scripting", "tabs", "storage"],
  "action": {
    "default_popup": "index.html"
  },
  "icons": {
    "16": "assets/icons/icon16.png",
    "32": "assets/icons/icon32.png",
    "48": "assets/icons/icon48.png",
    "128": "assets/icons/icon128.png"
  }
}

A propriedade mais interessante aqui é a action junto com a default_popup elas definem qual arquivo HTML será chamado quando o ícone da extensão for clicado, ou seja, o próximo passo é criar esse arquivo HTML.

Eu criei um arquivo HTML normal, como se fosse fazer uma página qualquer para web, depois eu adicionei referências para meu arquivo de estilização, de ícones e meu script.

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
</head>
<body>
    
</body>
</html>

No final o arquivo fica mais ou menos assim:

<!DOCTYPE html>
<html lang="pt-BR">

<head>
    <meta charset="UTF-8" />
    <link href="css/styles.css" rel="stylesheet" />
    <link href="css/fontawesome.css" rel="stylesheet" />
</head>

<body>
    <div class="container">
        <header class="header">
            <div class="logo">
                <img src="assets/dark-filled.svg" class="tabnewsIcon" />
                <h1>TabNews Save</h1>
            </div>

            <a href="https://github.com/SilvanoGPM/tabnews-save" target="_blank">
                <i class="fa-brands fa-github"></i>
            </a>
        </header>

        <section class="content">

            <ul data-js="post-list" class="postList"></ul>

            <p data-js="message" class="message">Carregando...</p>

            <button data-js="save-post" class="savePost disabled">
                <i class="fa-solid fa-plus"></i>
                Salvar Post
            </button>

        </section>
    </div>

    <script src="script.js"></script>
</body>

</html>

Outro arquivo importante é o script.js, porém para mais detalhes sobre o código fonte acesse o repositório do projeto.

Como instalar a extensão?

Atualmente a extensão funciona apenas no Google Chrome, e infelizmente não consegui realizar o envio para o Chrome Web Store(aparentemente precisa pagar $5 para ter o acesso), então a instalação precisa ser manual.

Passo a passo

  1. Baixe o código fonte no repositório do projeto.
  2. Abra o seu Google Chrome.
  3. Vá em / Mais Ferramentas / Extensões.
  4. Ative o modo desenvolvedor.
  5. Clique em carregar sem compactação, escolha a pasta onde você salvou o código e pronto, tudo deve estar funcionando.

Pontos negativos

  • Somente funciona no Google Chrome.
  • Instalação Manual.
  • Dados são salvos localmente.

(Prováveis) próximas funcionalides

  • Filtragem de posts salvos.
  • Adicionar um post apenas com o link para ele.
  • Adicionar um post sem precisar entrar nele.

Considerações

Foi algo legal de estudar como funciona, gostaria de saber estruturar melhor os arquivos e conseguir fazer funcionar no Firefox, então se você tem mais experiência na criação de extensões, por favor, comente como eu poderia fazer essas coisas.

3

Excelente extensão, parabéns!
Em relação ao Firefox, é muito tranquilo fazer funcionar, já que é basicamente a mesma coisa, eu ja fiz uma extensão que o código para o Chrome e para o Firefox são identicos, inclusive o manifest.
Ele é um pouco mais chatinho para compartilhar a extensão, já que você precisa assiná-la, para isso você utiliza o web-ext (npm install --global web-ext) da própria Mozilla, é um cli para rodar, assinar e buildar extensões para o Firefox.
O comando é o web-ext sign --api-key XXX --api-secret XXX. Essas chaves para a API você consegue nesse site: https://addons.mozilla.org/en-US/developers/addon/api/key/
Depois de rodar o comando ele gera um arquivo .xpi, e é ele que você utiliza para instalar a extensão no navegador, você precisa compartilhar apenas esse arquivo.
O web-ext também tem a opção de rodar a extensão com o comando web-ext run, ele abre um outro perfil no navegador sem nada, para garantir que nenhuma outra extensão que você tem instalada afete o funcionamento da que você está desenvolvendo. Na página do GitHub explica bastante coisa sobre essa ferramenta.
Espero ter ajudado!
Se tiver alguma dúvida pode perguntar, faz um tempo que eu fiz esse processo, então não lembro se falta algum passo.

1
2

Testei e funciona no Edge também, é meio óbvio pq ele é baseado no chromium, mas pensei em avisar mesmo assim. Desde que entrei no site senti falta de uma ferramenta assim, tem muitos posts que queremos acessar mais tarde por conta de tempo, ou por nosso conhecimento ainda não estar naquele nível para testar o que foi compartilhado, enfim. Muuuito obrigado por seu esforço nessa ferramenta e ainda mostrar como foi feita, para nós que estamos iniciando isso é incrível.

1

Obrigado pelo feedback, e valeu pelo por testar, meu objetivo agora é utilizar a dica que deram aqui nos comentários e usar no meu firefox(fiz a extensão e não consigo utilizar hahaha).

2
1

Parabéns pela iniciativa.

Eu ainda estou na luta. Fiz a minha extensão mas nao entendi como buildar para o chrome.

Na verdade estou bem perdido nessa etapa de deploy.

Não tenho a necessidade de publicar na chrome store, queria apenas gerar o equivalente ao executavel da extensão.

Se alguem souber me ajude 😅

A extensão em si é um autocomplete para comandos de chat na twitch.

1

Interessante, parabéns. Mesmo sendo algo redundante, já que o próprio chrome oferece 2 opções pra isso (barra de favoritos e lista de leitura).

Tem algum plano pra adicionar login com o google para poder sincronizar?

1

Cara incrível demais mano, queria que tivesse isso de forma nativa e tinha até salvo dois posts como favorito no proprio chrome, mas agora com essa extensão é melhor ainda, parabéns pelo projeto da extensão!

1
1
1
1
1

Parabéns! 🥳🥳
isso realmente vai ajudar muito, por exemplo, quando não quiser ler o texto no momento, só salvar para ler depois, fera dms 🤟

1
1
1
1
1
1

Pelo que eu entendi, é preciso pagar uma taxa de $5 para se cadastrar como um desenvolvedor, então atualmente não penso em investir dinheiro no projeto, mas quem sabe futuramente.

1
1
1

vc poderia vender essas extensoes daria uma boa grana, mas infelizmente o google nao aceita mais extensoes pagas. Nós Desenvolvedores temos que vender por fora.....