1
resposta

Não estou conseguindo fazer com que o alert não apareça

Olá,

Estou seguindo passo-a-passo do vídeo, mas não estou conseguindo ter o mesmo efeito de desativar o alert, conforme o vídeo. Já revisei o código várias vezes, testei a expressão regular no regextester, rodei novamente o comando npm start, mas ainda continua aparecendo. Se eu coloco o <script>alert('oi')</script> na MensagemView, o alert não aparece, mas quando coloco no NegociacoesView.ts o alert aparece.

O que pode ser? Observação: o controller não apresente nenhum problema de compilação

Segue meu código: NegociacoesView.ts

import { View } from './View'
import { Negociacoes } from '../models/Negociacoes'

export class NegociacoesView extends View<Negociacoes> {

    template(model: Negociacoes): string {

        return `
            <table class="table table-hover table-bordered">
            <thead>
                <tr>
                    <th>DATA</th>
                    <th>QUANTIDADE</th>
                    <th>VALOR</th>
                    <th>VOLUME</th>
                </tr>
            </thead>

            <tbody>
                ${model.paraArray().map(negociacao => `
                    <tr>
                        <td>${negociacao.data.getDate()}/${negociacao.data.getMonth() + 1}/${negociacao.data.getFullYear()}</td>
                        <td>${negociacao.quantity}</td>
                        <td>${negociacao.value}</td>
                        <td>${negociacao.volume}</td>
                    </tr>
                `).join('')}
            </tbody>

            <tfoot>
            </tfoot>
            </table>
            <script>alert('oi')</script>
        `;
    }
}

View.ts

export abstract class View<T> {
    private _element: JQuery;
    private _escape: boolean;

    constructor(selector: string, escape?: boolean) {

        this._element = $(selector);
        this._escape = escape;
    }

    update(model: T) {
        let template = this.template(model);
        /**
         * Avoid malicious code - when adding script tag on your template
         */
        if (this._escape)
            template = template.replace(/<script>[\s\S]*?<\/script>/g, '');

        this._element.html(this.template(model));
    }

    abstract template(model: T): string
}
1 resposta

Acredito que se você fizer como a seguir, vai funcionar, porque testei aqui:

<script>${alert('oi')}</script>

Usando "template strings" (https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/template_strings).

Mas agora li direito e vi que você quer mesmo que isso funcione por conta da regex, né...