Conteúdo de acesso de
-
05-07-2019 - |
Pergunta
<noscript><div id="example">I want to get this innerHTML</div></noscript>
<script type="text/javascript"> alert($('example').innerHTML);</script>
Este trecho de javascript apenas retorna uma string vazia. Existe uma maneira de obter o conteúdo de um nó noscript?
P.S. Eu estou usando o protótipo neste projeto particular.
Solução
Se o scripting estiver ativada, o elemento noscript é definido como contendo apenas texto - embora deva ser parsable texto, com algumas restrições de conteúdo. Com isso em mente, você deve ser capaz de extrair o texto, analisá-lo e, em seguida, encontrar o seu elemento desejado. Um exemplo rudimentar desse seguinte:
var nos = document.getElementsByTagName("noscript")[0];
// in some browsers, contents of noscript hang around in one form or another
var nosHtml = nos.textContent||nos.innerHTML;
if ( nosHtml )
{
var temp = document.createElement("div");
temp.innerHTML = nosHtml;
// lazy man's query library: add it, find it, remove it
document.body.appendChild(temp);
var ex = document.getElementById("example");
document.body.removeChild(temp);
alert(ex.innerHTML);
}
Note que quando eu escrevi originalmente esta resposta, o acima falhou no Google Chrome; acesso ao conteúdo noscript parece estar um pouco melhor-suportado nos dias de hoje, mas ainda me parece um caso de ponta que é, talvez, um pouco mais prováveis ??do que outros elementos para erros de exposição - I evitar se você tiver outras opções
Outras dicas
Eu não tenho certeza sobre o protótipo, mas isso funciona em Chrome com jQuery:
$('noscript').before($('noscript').text());
A partir da HTML 4.0 especificação :
O elemento NOSCRIPT permite aos autores para fornecer conteúdo alternativo quando um script não é executado. O conteúdo de um elemento NOSCRIPT só deve ser prestado por um agente de usuário roteiro-aware nos seguintes casos:
- O agente de usuário é configurado para não avaliar scripts.
- O agente usuário não suporta uma linguagem de script chamado por um elemento SCRIPT no início do documento.
Parece-me que isto implica que todo o conteúdo da tag NOSCRIPT (neste caso, o seu div) são ignoradas completamente se scripting está habilitado no navegador. Você verificou que o "exemplo" div é acessível através do DOM em tudo no seu caso?
Os testes com o Firefox 3.0.7, Safari 3.2.2, e MSIE 7.0.5730.13 (todos em WinXP SP3), parece que tudo dentro das tags <noscript>
é completamente omitido da árvore DOM.
Pode ser possível para acessar o elemento <noscript>
si, no entanto, em seguida, usar métodos DOM para alterar seus elementos filho.
Tente $ ($ ( "noscript"). Text ()) com jQuery.