Sintoma: Ao definir um valor para o InnerHTML de um elemento, se o código HTML fornecido contiver scripts JS, muitas vezes esses scripts são inválidos ou são válidos em algum navegador, mas não em outros navegadores.
Causa: diferentes navegadores têm diferentes maneiras de lidar com scripts inseridos no INNERHTML. Após o treino, está resumido da seguinte forma:
Para o IE, primeiro, a tag de script deve ter um atributo de adiamento e, em segundo lugar, no momento da inserção, o nó ao qual o Innerhtml deve estar na árvore dom.
Para o Firefox e a Opera, o nó no qual o Innerhtml não tem permissão para estar na árvore Dom no momento da inserção.
De acordo com a conclusão acima, é fornecido um método geral para definir o InnerHTML:
A cópia do código é a seguinte:
/*
* Descrição: Configuração do navegador cruzado INNERHTML Método
* Permite a inserção do código HTML para incluir script e estilo
* Parâmetros:
* el: o nó na árvore dom, defina seu inerhtml
* HTMLCODE: Código HTML inserido
* Navegadores testados: IE5+, Firefox1.5+, Opera8.5+
*/
var set_innerhtml = função (el, htmlcode)
{var ua = Navigator.UserAgent.TolowerCase ();
if (ua.indexOf ('msie')> = 0 && ua.indexof ('Opera') <0)
{htmlcode = '<div style = "display: nenhum"> para ie </div>' + htmlcode;
htmlcode = htmlcode.replace (/<script ([^>]*)>/gi, '<script $ 1 defer = "true">');
el.innerhtml = htmlcode;
El.removeChild (El.Firstchild);
}
outro
{var el_next = el.nextsibling;
var el_parent = el.parentnode;
el_parent.RemoveChild (EL);
el.innerhtml = htmlcode;
if (el_next)
el_parent.insertBefore (el, el_next)
outro
el_parent.appendchild (el);
}
}
Há outro problema com o código acima: se o código HTML inserido contiver uma instrução document.write, ele destruirá a página inteira. Para este caso, ele pode ser evitado pela redefinição do documento.WRITE. O código é o seguinte:
A cópia do código é a seguinte:
/*
Descrição: Redefine a função Document.Write.
Evite usar set_innerhtml, a inserção do código HTML contém instruções Document.Write, fazendo com que a página original seja corrompida.
*/
document.write = function () {
var corpo = document.getElementsByTagName ('Body') [0];
for (var i = 0; i <argumentos.length; i ++) {
argumento = argumentos [i];
if (typeof argument == 'string') {
var el = body.appendChild (document.createElement ('div'));
set_innerhtml (el, argumento)
}
}
}