Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Uso inadequado de innerHTML.

Pessoal, eu estou com uma pulguinha atrás da orelha, eu até voltei nessa aula para ver se tinha essa dúvida no fórum mas eu não achei. Então, já desculpa aí se o tópico é repetido.

O instrutor usa o template string para criar dinamicamente o parágrafo, e por isso usou o innerHTML. Beleza, o problema é que do jeito que o código está, o usuário pode usar o campo de digitação e criar dinamicamente qualquer elemento. Eu testei e consegui.

Eu tentei rodar um script e não funcionou, mas eu acho que isso tem a ver com o chrome. E se for um navegador que não tem essa proteção, eu posso escrever o script que eu quiser?

Nesse caso não seria melhor criar o parágrafo com o createElement e usar o textContent para atribuir o valor do input?

Segue o código:

const criarTarefa = (evento) => {

    evento.preventDefault()

    const lista = document.querySelector('[data-list]')
    const input = document.querySelector('[data-form-input]')
    const valor = input.value

    const tarefa = document.createElement('li')
    tarefa.classList.add('task')

    const conteudo = `<p class="content">${valor}</p>`

    tarefa.innerHTML = conteudo

    lista.appendChild(tarefa)
    input.value = " "

}
1 resposta
solução!

Oi Laisse, tudo bem?

Muito interessante a sua dúvida! Com o innerHTML, nós conseguimos inserir tags HTML de forma dinâmica, realmente.

Sobre a questão do script, isso não muda de navegador para navegador, isso é uma questão de segurança do próprio HTML. Ou seja, embora adicionar uma tag <script> para ser adicionada no innerHTML pareça uma tentativa de ataque, é na verdade inofensivo, pois o HTML5 especifica que uma tag <script>, inserida via innerHTML, não deve ser executada.

Ainda assim, ainda existe um certo risco de segurança sempre que você usa innerHTML para definir uma string sobre a qual você não tem controle. O ideal é que quando temos um campo input em que o usuário pode digitar o que deseja, esse valor não seja adicionado via innerHTML, e sim como você falou: criando o elemento com createElement() e então atribuindo seu valor com textContent.

Você pode ler mais sobre o assunto nesse link.

Espero ter ajudado, bons estudos =)