The Codest
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Indústrias
    • Fintech e Banca
    • E-commerce
    • Adtech
    • Tecnologia da saúde
    • Fabrico
    • Logística
    • Automóvel
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
Seta para trás VOLTAR
2019-07-29
Desenvolvimento de software

Criar extensões do Google Chrome com o estilizador de legendas Netflix

Lukasz Kolko

Hoje, vamos criar extensões do Google Chrome para manipular os estilos de legendas da Netflix em tempo real. Encontrará informações sobre como criar extensões de raiz, alguns conselhos práticos e pontos de vista gerais sobre a arquitetura das extensões. Se não está satisfeito com as opções de legendas da Netflix disponíveis ou apenas pretende criar rapidamente uma extensão para facilitar a sua vida, este artigo é para si.

Os nossos objectivos:

  • criar lógica de extensão
  • armazenar definições no Armazenamento local do browser
  • carregar automaticamente e ativar extensões apenas na página da Netflix
  • criar menu pop-up
  • criar formulários com opções de legendas

Requisitos:

  • conhecimentos básicos de HTML, CSS e JavaScript

A Netflix, através da sua API, envia cada frase de legenda separadamente. Utiliza estilos CSS para estilizar as legendas. Com acesso ao DOM da página, podemos manipular esses estilos recebidos com a extensão do Chrome.

O manifesto

Em primeiro lugar, temos de criar o ficheiro de manifesto chamado manifest.json. Este ficheiro informa o navegador sobre a configuração da extensão, como os ficheiros UI, os scripts de fundo e as capacidades que a extensão pode ter.

Aqui está um manifesto completo.

 {
   "name": "Estilizador de legendas Netflix",
   "versão": "1.0",
   "descrição": "Estilizador de legendas Netflix",
   "autor": "twistezo",
   "permissões": ["tabs", "storage", "declarativeContent", "https://*.netflix.com/"],
   "fundo": {
     "scripts": ["background.js"],
     "persistent" (persistente): false
   },
   "page_action": {
     "default_popup": "popup.html",
     "default_icon": "logo.png"
   },
   "manifest_version": 2
 }

Como vê, temos algumas informações padrão, como o nome, a versão, a descrição, a página inicialurl e manifestoversão.

Uma das partes importantes do manifesto é a secção de permissões. Esta é uma matriz com elementos a que a nossa extensão pode aceder.

No nosso caso, precisamos de ter acesso aos separadores para encontrar o separador ativo, executar scripts e enviar mensagens entre a IU e a extensão. Precisamos de armazenamento para guardar as definições da extensão no navegador e de declarativeContent para tomar medidas em função do conteúdo do separador. O último elemento https://*.netflix.com/ permite o acesso da extensão apenas ao domínio netflix.com.

As extensões do Chrome têm uma lógica separada da IU, pelo que precisamos de background.scripts, que indica à extensão onde pode encontrar a sua lógica. persistent: false significa que este script será utilizado apenas se necessário. page_action é a secção com a parte da IU. Temos aqui um ficheiro HTML simples para um menu pop-up e um logótipo PNG da extensão.

Lógica de extensão

Primeiro, temos de configurar os comportamentos runtime.onInstalled, remover quaisquer regras actuais (por exemplo, de versões mais antigas) e declarar a função para adicionar novas regras. Utilizamos o Armazenamento local para as definições de armazenamento, para podermos atribuir definições predefinidas depois de a extensão ser instalada.

Iremos utilizar três parâmetros de estilo de legendas:

  • vPos - posição vertical a partir do fundo [px]
  • fTamanho - tamanho da fonte [px]
  • fCor - cor da fonte [HEX]

Criar fundo.js:

chrome.runtime.onInstalled.addListener(() => {
chrome.storage.local.set({ vPos: 300, fSize: 24, fColor: "#FFFFFF" });

chrome.declarativeContent.onPageChanged.removeRules(undefined, () => {
chrome.declarativeContent.onPageChanged.addRules([
// matriz com regras
]);
});
});
```

O nosso objetivo principal é desativar o botão de extensão em todos os domínios que não sejam netflix.com. Criamos uma nova regra com Matriz de estado da página condições e declarar ShowPageAction onde a nova regra será atribuída.

 {
   condições: [
     novo chrome.declarativeContent.PageStateMatcher({
       pageUrl: { hostSuffix: "netflix.com" }
     })
   ],
   acções: [new chrome.declarativeContent.ShowPageAction()]
 }

O próximo passo é adicionar o ouvinte tabs.onUpdated, que executará o nosso script enquanto carrega ou actualiza o separador ativo.

 {
   condições: [
     novo chrome.declarativeContent.PageStateMatcher({
       pageUrl: { hostSuffix: "netflix.com" }
     })
   ],
   acções: [new chrome.declarativeContent.ShowPageAction()]
 }

Em primeiro lugar, verificamos se changeInfo.status tem o estado completo. Isto significa que o sítio Web neste separador está carregado. Em seguida, obtemos definições do Armazenamento local e declaramos qual o script que deve ser executado no separador atual com tabId. Por fim, na chamada de retorno, enviamos a mensagem com as definições da IU para o script.

Extensão UI

Para criar um menu pop-up de extensão com formulário, criamos três ficheiros: popup.html e popup.css com camadas visuais e popup.js com lógica para a comunicação entre o menu e o isolado fundo.js guião.

O nosso objetivo da IU:

Modelador Netflix

Aqui temos um formulário HTML simples com validação incorporada: popup.html:

<code> <!DOCTYPE html>
 <html>
   <head>
     <link href="https://fonts.googleapis.com/css?family=Open+Sans:400,600" rel="stylesheet" />
     <link rel="stylesheet" href="popup.css" />
   </head>
   <body>
     <div class="container logo">
       ESTILIZADOR DE LEGENDAS NETFLIX
     </div>
     <form id="popup-form" class="container" action="">
       <div class="input-info">Posição vertical a partir do fundo [px]</div>
       <input class="form-control" id="vPos" type="number" value="" min="0" max="5000" />
       <div class="input-info">Tamanho do tipo de letra [px]</div>
       <input id="fSize" type="number" value="" min="0" max="300" />
       <div class="input-info">Cor da fonte [HEX]</div>
       <input id="fColor" type="text" value="" pattern="^#[0-9A-F]{6}$" />
       <button id="change" type="submit">Alterar</button>
     <input type="hidden" name="trp-form-language" value="pt"/></form>
     <div class="container footer">
       © twistezo, 2019
     </div>
     <script src="popup.js"></script>
   </body>
 </html>

A estilização do menu pop-up não é o objetivo deste artigo, pelo que sugiro que visite https://github.com/twistezo/netflix-subtitles-styler e copiar todo o popup.css no seu ficheiro projeto.

Lógica da IU - popup.js:

const form = document.getElementById("popup-form");
const inputElements = ["vPos", "fSize", "fColor"];

chrome.storage.local.get(inputElements, data => {
inputElements.forEach(el => {
document.getElementById(el).value = data[el];
});
});

form.addEventListener("submit", event => {
event.preventDefault();
const [vPos, fSize, fColor] = [...inputElements.map(el => event.target[el].value)];

chrome.tabs.query({ active: true, currentWindow: true }, tabs => {
chrome.storage.local.set({ vPos, fSize, fColor });
chrome.tabs.executeScript(
tabs[0].id,
{
file: "script.js"
},
() => {
const error = chrome.runtime.lastError;
if (error) "Erro. ID do separador: " + tab.id + ": " + JSON.stringify(error);

    chrome.tabs.sendMessage(tabs[0].id, { vPos, fSize, fColor });
  }
);

});
});
```

No script acima, carregamos as definições do Armazenamento local e anexamo-las às entradas do formulário. Em seguida, criamos um ouvinte para apresentar com funções para guardar definições no Armazenamento local e enviá-las por mensagem para o nosso script. Como vê, utilizamos o Armazenamento local em todos os componentes. A extensão do Chrome não tem o seu próprio espaço de dados, pelo que a solução mais simples é utilizar o espaço local do navegador, como o Armazenamento local. Também utilizamos frequentemente o sendMessage função. A causa é a arquitetura das extensões do Chromme - têm uma lógica separada da IU.

O guião

Agora é altura de criar script.js com lógica para manipular estilos de legendas Netflix.

Primeiro, criamos onMessage ouvinte para receber mensagens com definições da extensão.

 chrome.runtime.onMessage.addListener((message, _sender, _sendResponse) => {
   // função para manipular estilos
 });

Depois, no mesmo ficheiro, criamos a função para alterar os estilos Netflix adequados para os nossos estilos em tempo real.

changeSubtitlesStyle = (vPos, fSize, fColor) => {
console.log("%cnetflix-subtitles-styler : o observador está a funcionar... ", "color: red;");

callback = () => {
// .player-timedText
const subtitles = document.querySelector(".player-timedtext");
if (subtitles) {
subtitles.style.bottom = vPos + "px";

  // .player-timedtext > .player-timedtext-container [0]
  const firstChildContainer = subtitles.firstChild;
  if (firstChildContainer) {
    // .player-timedtext > .player-timedtext-container [0] > div
    const firstChild = firstChildContainer.firstChild;
    se (firstChild) {
      firstChild.style.backgroundColor = "transparent";
    }

    // .player-timedtext > .player-timedtext-container [1]
    const secondChildContainer = firstChildContainer.nextSibling;
    if (secondChildContainer) {
      for (const span of secondChildContainer.childNodes) {
        // .player-timedtext > .player-timedtext-container [1] > span
        span.style.fontSize = fSize + "px";
        span.style.fontWeight = "normal";
        span.style.color = fColor;
      }
      secondChildContainer.style.left = "0";
      secondChildContainer.style.right = "0";
    }
  }
}

};

const observer = new MutationObserver(callback);
observer.observe(document.body, {
subárvore: true,
atributos: false,
childList: true
});
};
```

Para o Netflix, sempre que recebe frases de legendas completas, troca apenas a parte das legendas do DOM da página. Por isso, temos de usar uma função de observador como MutaçãoObservadorque irá acionar o nosso changeSubtitlesStyle sempre que o DOM da página for alterado. No retorno de chamada vemos uma simples manipulação de estilos. As linhas comentadas contêm informações sobre onde encontrar os estilos corretos.

Tempo para correr

Presumo que não tenha uma conta de programador na Chrome Webstore. Por isso, para executar esta extensão, vá a chrome://extensions/ no seu Chrome, clique no botão Carga não embaladaselecionar a pasta com a extensão e já está! Depois, obviamente, vá para a página do Netflix para testá-lo.

Conclusões

Como vê, é fácil começar a criar algumas extensões que facilitam a vida. A parte mais importante é compreender a arquitetura dividida da Extensão do Google Chrome e a comunicação entre componentes. Este estilizador de legendas é apenas uma demonstração simples do que pode fazer com a API de extensão do Chrome.

Como vê, é fácil começar a criar algumas extensões que facilitam a vida. A parte mais importante é compreender a arquitetura dividida da Extensão do Google Chrome e a comunicação entre componentes. Este estilizador de legendas é apenas uma demonstração simples do que pode fazer com a API de extensão do Chrome.

Imagine melhorar a sua experiência de visualização em plataformas como a Netflix com o poder das extensões. Por exemplo, o popular Festa Netflix permite aos utilizadores verem conteúdos em conjunto e em sincronia. Uma ícone de extensão na sua barra de ferramentas pode proporcionar-lhe um acesso rápido às funcionalidades de controlo quando streaming Netflix. A ideia subjacente a ferramentas como Netflix alargado é adicionar mais funcionalidades diretamente ao Aplicação Netflix através do Extensão Netflix integrado no Chrome. Ao navegar no Site da NetflixEssas extensões podem ajudar os utilizadores a navegar através de Categorias Netflix de forma mais eficiente ou mesmo descobrir Conteúdo da Netflix que de outra forma não encontrariam.

Além disso, imagine poder adicionar um imagem de perfil personalizada ao seu perfil Netflix ou ter mais controlo sobre as legendas e a velocidade de reprodução. Tudo isto pode ser acedido diretamente a partir do Chrome web navegador, tornando o Experiência Netflix mais adaptadas às preferências de cada utilizador. As extensões não só melhoram as funcionalidades de sítios Web como o Netflix, mas também elevam a interação geral do utilizador, tornando-a mais envolvente e fácil de utilizar.

Ligações úteis:

  • Repositório com este projeto https://github.com/twistezo/netflix-subtitles-styler
  • Guia oficial do Google https://developer.chrome.com/extensions/overview
  • API de extensão do Chrome https://developer.chrome.com/extensions/api_index

Artigos relacionados

Ilustração de uma aplicação de cuidados de saúde para smartphone com um ícone de coração e um gráfico de saúde em ascensão, com o logótipo The Codest, representando soluções digitais de saúde e HealthTech.
Desenvolvimento de software

Softwares para o setor de saúde: Tipos, casos de uso

As ferramentas em que as organizações de cuidados de saúde confiam atualmente não se assemelham em nada às fichas de papel de há décadas atrás. O software de cuidados de saúde apoia agora os sistemas de saúde, os cuidados aos doentes e a prestação de cuidados de saúde modernos em...

OCODEST
Ilustração abstrata de um gráfico de barras em declínio com uma seta ascendente e uma moeda de ouro que simboliza a eficiência ou a poupança de custos. O logótipo The Codest aparece no canto superior esquerdo com o slogan "In Code We Trust" sobre um fundo cinzento claro
Desenvolvimento de software

Como dimensionar a sua equipa de desenvolvimento sem perder a qualidade do produto

Aumentar a sua equipa de desenvolvimento? Saiba como crescer sem sacrificar a qualidade do produto. Este guia cobre sinais de que é hora de escalar, estrutura da equipe, contratação, liderança e ferramentas - além de como o The Codest pode...

OCODEST
Desenvolvimento de software

Construir aplicações Web preparadas para o futuro: ideias da equipa de especialistas do The Codest

Descubra como o The Codest se destaca na criação de aplicações web escaláveis e interactivas com tecnologias de ponta, proporcionando experiências de utilizador perfeitas em todas as plataformas. Saiba como a nossa experiência impulsiona a transformação digital e o negócio...

OCODEST
Desenvolvimento de software

As 10 principais empresas de desenvolvimento de software sediadas na Letónia

Saiba mais sobre as principais empresas de desenvolvimento de software da Letónia e as suas soluções inovadoras no nosso último artigo. Descubra como estes líderes tecnológicos podem ajudar a elevar o seu negócio.

thecodest
Soluções para empresas e escalas

Fundamentos do desenvolvimento de software Java: Um Guia para Terceirizar com Sucesso

Explore este guia essencial sobre o desenvolvimento de software Java outsourcing com sucesso para aumentar a eficiência, aceder a conhecimentos especializados e impulsionar o sucesso do projeto com The Codest.

thecodest

Subscreva a nossa base de conhecimentos e mantenha-se atualizado sobre os conhecimentos do sector das TI.

    Sobre nós

    The Codest - Empresa internacional de desenvolvimento de software com centros tecnológicos na Polónia.

    Reino Unido - Sede

    • Office 303B, 182-184 High Street North E6 2JA
      Londres, Inglaterra

    Polónia - Pólos tecnológicos locais

    • Parque de escritórios Fabryczna, Aleja
      Pokoju 18, 31-564 Cracóvia
    • Embaixada do Cérebro, Konstruktorska
      11, 02-673 Varsóvia, Polónia

      The Codest

    • Início
    • Sobre nós
    • Serviços
    • Case Studies
    • Saber como
    • Carreiras
    • Dicionário

      Serviços

    • Aconselhamento
    • Desenvolvimento de software
    • Desenvolvimento backend
    • Desenvolvimento de front-end
    • Staff Augmentation
    • Programadores de back-end
    • Engenheiros de nuvem
    • Engenheiros de dados
    • Outros
    • Engenheiros de GQ

      Recursos

    • Factos e mitos sobre a cooperação com um parceiro externo de desenvolvimento de software
    • Dos EUA para a Europa: Porque é que as empresas americanas decidem mudar-se para a Europa?
    • Comparação dos centros de desenvolvimento da Tech Offshore: Tech Offshore Europa (Polónia), ASEAN (Filipinas), Eurásia (Turquia)
    • Quais são os principais desafios dos CTOs e dos CIOs?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Direitos de autor © 2026 por The Codest. Todos os direitos reservados.

    pt_PTPortuguese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek cs_CZCzech pt_PTPortuguese