Estou tendo problemas para fazer isso funcionar. Primeiro tentei definir minhas tags de script como strings e, em seguida, usar jquery replaceWith () para adicioná-las ao documento após o carregamento da página:
var a = '<script type="text/javascript">some script here</script>';
$('#someelement').replaceWith(a);
Mas recebi erros literais de string nessa var. Em seguida, tentei codificar a string como:
var a = '&left;script type="text/javascript">some script here<\/script>';
mas enviar isso para a replaceWith()
saída apenas aquela string para o navegador.
Alguém pode me dizer como você faria para adicionar dinamicamente uma <script>
tag ao navegador após o carregamento da página, de preferência via jQuery?
<script>
tag ao documento?eval()
função. Mas o uso deeval()
quase sempre sugere que existe uma maneira melhor de fazer o que você está tentando fazer.document.write
e você chamá-lo após o carregamento da página, ele destruirá a página.<iframe>
elementos? Você pode adiar a configuração do<iframe>
URL até que esteja pronto.Respostas:
Você pode colocar o script em um arquivo separado e usá-lo
$.getScript
para carregá-lo e executá-lo.Exemplo:
fonte
$.getScript
irá apenas carregar um arquivo .js via AJAX e executá-lo. O script não precisa estar no DOM para acessar um div em sua página.$.getScript()
o script precisará estar no mesmo domínio ou tanto o domínio remoto quanto o navegador precisarão suportarCORS
.$.ajax
notas: "As solicitações de script e JSONP não estão sujeitas às mesmas restrições de política de origem." fonte . Em outras palavras,$.getScript
pode extrair arquivos .js de outros domínios, não apenas do seu .Experimente o seguinte:
http://api.jquery.com/append
fonte
append
para adicionar um script. Append faz com que até mesmo o script embutido avalie imediatamente (exatamente o que eu precisava). ObrigadoEsta é a maneira correta de fazer isso com o JQuery moderno (2014):
ou se você realmente deseja substituir um div, pode fazer:
fonte
Uma maneira mais simples é:
Você também pode usar este formulário para carregar o css.
fonte
</script>
em sua fonte, pois isso pode causar problemas de análise: stackoverflow.com/questions/236073/…/
fez o truque para mim:$('head').append('<script src="your.js"><\/script>');
Essa resposta é tecnicamente semelhante ou igual à que jcoffland respondeu. Acabei de adicionar uma consulta para detectar se um script já está presente ou não. Preciso disso porque trabalho em um site de intranet com alguns módulos, alguns dos quais compartilham scripts ou trazem seus próprios, mas esses scripts não precisam ser carregados sempre novamente. Estou usando este snippet há mais de um ano em ambiente de produção, funciona como um encanto. Comentando para mim mesmo: Sim, eu sei, seria mais correto perguntar se existe uma função ... :-)
fonte
Existe uma solução alternativa que parece mais um hack e concordo que não é a maneira mais elegante de fazer isso, mas funciona 100%:
Digamos que sua resposta AJAX seja algo como
Observe que pulei a tag de fechamento de propósito. Em seguida, no script que carrega o acima, faça o seguinte:
Só não me pergunte por quê :-) Esta é uma das coisas que cheguei como resultado de tentativas desesperadas quase aleatórias e falhas.
Não tenho sugestões completas sobre como funciona, mas curiosamente, NÃO funcionará se você acrescentar a tag de fechamento em uma linha.
Em tempos como estes, sinto que consegui dividir por zero.
fonte
<\/script>
seria válidoExemplo:
Deve funcionar. Eu tentei; mesmo resultado. Mas quando usei isso:
Isso funcionou para mim.
Edit: Eu esqueci o
#someelement
(aliás, talvez eu queira usar#someElement
por causa das convenções)A coisa mais importante aqui é o + = para que o html seja adicionado e não substituído.
Deixe um comentário se não funcionar. Eu gostaria de te ajudar!
fonte
Aqui está uma maneira muito mais clara - sem necessidade de jQuery - que adiciona um script como o último filho de
<body>
:Mas se você quiser adicionar e carregar scripts, use o método Rocket Hazmat .
fonte
Se você estiver tentando executar algum JavaScript gerado dinamicamente, ficará um pouco melhor usando
eval
. No entanto, JavaScript é uma linguagem tão dinâmica que você realmente não deveria ter necessidade disso.Se o script for estático, a
getScript
-sugestão de Rocket é o caminho a percorrer.fonte