Como executo algum JavaScript que é uma string?
function ExecuteJavascriptString()
{
var s = "alert('hello')";
// how do I get a browser to alert('hello')?
}
javascript
divinci
fonte
fonte
Você pode executá-lo usando uma função. Exemplo:
fonte
var F=function(){eval(theInstructions);};
?new Function("alert('Hello World');")()
A
eval
função avaliará uma string que é passada para ela.Mas o uso de
eval
pode ser perigoso , portanto, use com cuidado.Edit: annakata tem um bom argumento - não é apenas
eval
perigoso , é lento . Isso ocorre porque o código a ser avaliado deve ser analisado no local, de modo que serão necessários alguns recursos de computação.fonte
eval()
é perigoso. Existe alguma alternativa?Use eval ().
W3 Visita às escolas de avaliação . O site tem alguns exemplos úteis de avaliação. A documentação do Mozilla cobre isso em detalhes.
Você provavelmente receberá muitos avisos sobre como usá-lo com segurança. NÃO permita que os usuários injetem QUALQUER COISA no eval () , pois é um grande problema de segurança.
Você também vai querer saber que eval () tem um escopo diferente .
fonte
eval
melhor para mim do que o artigo do W3Schools. Algo legível com boas explicações e exemplos seria developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… . E não, eu não sou bjorningeTente o seguinte:
Pessoalmente, não testei, mas parece funcionar.
fonte
Um pouco como o que Hossein Hajizadeh alerady disse, embora com mais detalhes:
Existe uma alternativa para
eval()
.A função
setTimeout()
foi projetada para executar algo após um intervalo de milissegundos e o código a ser executado é formatado como uma sequência.Funcionaria assim:
1
significa que ele aguardará 1 milissegundo antes de executar a sequência.Pode não ser a maneira mais correta de fazê-lo, mas funciona.
fonte
setTimeout
? Observe que, em qualquer caso, isso tornará a execução assíncrona. Isso significa que todo o código que segue asetTimeout
chamada será invocado antes da passagem do códigosetTimeout
(mesmo se chamado com 0 (zero)).Eu acho que esse é o melhor caminho.
fonte
Use eval como abaixo. Eval deve ser usado com cautela, uma simples pesquisa sobre " eval is evil " deve apontar algumas dicas.
fonte
Verifiquei isso em muitos scripts complexos e ofuscados:
fonte
Se você deseja executar um comando específico (ou seja, string) após um tempo específico - cmd = seu código - InterVal = atraso na execução
fonte
Val
emInterVal
maiúscula?Para usuários que estão usando o nó e que estão preocupados com as implicações de contexto das
eval()
ofertas do nodejsvm
. Ele cria uma máquina virtual V8 que pode proteger a execução do seu código em um contexto separado.Levar as coisas um passo adiante é o
vm2
que fortalece,vm
permitindo que a VM execute código não confiável.https://nodejs.org/api/vm.html - Nó oficialjs / vm
https://github.com/patriksimek/vm2 - vm2 estendido
fonte
Mas isso pode ser perigoso se você estiver obtendo dados de usuários, embora eu suponha que se eles travarem o próprio navegador, isso é problema deles.
fonte
eval
é código de usuários, que poderia, por exemplo, permitir que os usuários roubassem contas de outros usuários sem que eles soubessem apenas carregando a página.Não tenho certeza se isso é trapaça ou não:
fonte
Nova função e apply () juntos também funciona
fonte
eval()
. developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/…Eu estava respondendo a uma pergunta semelhante e tive outra ideia de como fazer isso sem usar
eval()
:No código acima, você basicamente cria o Blob, contendo seu script, para criar a URL do objeto (representação do objeto File ou Blob na memória do navegador). Como você possui
src
propriedade na<script>
tag, o script será executado da mesma maneira como se tivesse sido carregado de qualquer outro URL.fonte
fonte
avaliação deve fazê-lo.
fonte
Lembre-se, porém, que a avaliação é muito poderosa e insegura. É melhor você ter certeza de que o script que você está executando é seguro e imutável pelos usuários.
fonte
Pode-se usar mathjs
Snippet do link acima:
scope
é qualquer objeto. Portanto, se você passar o escopo global para a função evalute, poderá executar alert () dinamicamente.Além disso, mathjs é uma opção muito melhor que eval () porque é executado em uma sandbox.
As versões mais recentes do mathjs não usam eval () ou Function ().
fonte
Usar o eval e criar uma nova função para executar o javascript traz muitos riscos à segurança.
Eu prefiro esse método para executar o Javascript que recebo como uma string.
fonte