Como inserir com protótipo?
-
20-09-2019 - |
Pergunta
Estou usando a função de inserção de protótipo para aplicar algum html que contém <script>...</script>
. E dentro deste script, estou definindo uma nova função. E enquanto eu leio aqui O protótipo executa o script que está dentro <script>
tags e depois remove, mas todas as funções devem permanecer acessíveis. Mas a partir desse momento não posso executar minha nova função.
$('some_id').insert({ bottom: '<script> ... </script>' });
Como resolvê -lo? O melhor seria que não remove <script>
Tag.
EDITAR:
Até agora eu fiz assim:
var add_here = document.getElementById('prepayment_group_items');
var src = document.createElement('div');
src.innerHTML = 'a lot of html with script tags';
add_here.appendChild(src);
Solução
Esta função adicionará uma tag de script à cabeça da página, com o conteúdo que você a passar.
function insertScript(script_text) {
var script_tag = document.createElement('script');
script_tag.type = "text/javascript";
var script = document.createTextNode(script_text);
script_tag.appendChild(script);
document.getElementsByTagName('head')[0].appendChild(script_tag);
}
Estou mais familiarizado com o jQuery do que o protótipo, então fiz isso no Pure JS.
Traduza a parte em que eu crio o elemento e a parte em que coloco o elemento da cabeça em protótipo, se quiser, mas use a chamada para AppendChild em vez de protótipo inserir Função, pois fará o que você pedir, em vez de avaliar o JS.
Claro, agora que eu olho para o que você está pedindo, você também pode tentar alterar o código que está inserindo para algo como:
window.update_12345 = function() {...}
Não tenho certeza se isso vai se encaixar ou não, mas vale a pena tentar.
Outras dicas
Se você quiser incluir JavaScript na cabeça, você pode fazer algo assim:
$$('head').first().insert({
bottom: new Element('script', {
type: 'text/javascript'
}).update('function helloWorldToConsole(){console.log("Hello World!")}')
});
Isso cria uma nova etiqueta de script e a insere no fundo da sua cabeça. Mas seria muito melhor se você adicionar um arquivo JavaScript externo como este:
$$('head').first().insert({
bottom: new Element('script', {
type: 'text/javascript',
src: 'http://www.example.com/path/file.js'
})
});
Você pode usar as funções posteriormente em seus scripts.
tente isso ..
$('<script></script>',{
type:'custom',
id:'script1'
}).appendTo('head').attr('type','text/javascript');
$('#script1').append(< add js code here >);
});