Exemplo do botão +1 do Google:
<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
{"parsetags": "explicit"}
</script>
A tag do script possui um atributo src e conteúdo. O que isso significa e como funciona?
Exemplo do botão +1 do Google:
<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
{"parsetags": "explicit"}
</script>
A tag do script possui um atributo src e conteúdo. O que isso significa e como funciona?
Respostas:
Navegadores diferentes tratam isso de maneira diferente. Alguns executam o conteúdo apenas se ele src
estiver incluído sem erros. Alguns o executam após tentar incluir o src
script, independentemente do sucesso. Como esse comportamento não é confiável (e é proibido no HTML5 ), ele deve ser evitado.
O Google não está confiando em nenhum comportamento específico. Como o conteúdo é apenas um objeto literal (um valor), sua execução não faria nada além de causar um erro silencioso. O código do Google analisa o conteúdo da script
própria tag e ajusta seu comportamento com base nisso.
src
atributo estiver presente e, na verdade, não for um objeto literal, esse código produziria um SyntaxError
se executado, é simplesmente "texto JSON" que o script usará por si só mais tarde.
s=document.getElementsByTagName('script'); text = s[s.length-1].innerHTML;
acho que não há maneira de buscar o conteúdo de um nó de script que não envolva tocar no DOM .
Se um elemento de script tiver um atributo src , o conteúdo deverá ser ignorado, qualquer outro comportamento não será conforme.
Nos blogs (como um hack), foi sugerido colocar o conteúdo no elemento, sabendo que ele não será avaliado. Em seguida, use os métodos DOM para obter o conteúdo como uma string e avaliá- lo ou inseri-lo em um novo elemento de script. Nenhuma dessas é uma boa ideia.
De acordo com a especificação de rascunho do HTML5 , os <script>
elementos com src
atributos devem ter apenas código comentado, cujo objetivo é fornecer documentação para o script. No entanto, não parece que o Google esteja em conformidade com esta especificação.
Após o carregamento do script, ele procura dentro de sua própria tag de script para acessar seu conteúdo.
Ele usará algum código semelhante a este:
var scripts = document.getElementsByTagName("script");
var data = eval(scripts[scripts.length - 1].innerHTML);
Cortesia de John Resig .