Teste o seguinte código (demonstração) nos navegadores IE6, IE7, Firefox2+, Firefpx3+, Opera9.6+, Safari3.1+:
<div id = test>
<a href =#> teste </a>
</div>
<div id = resultado> </div>
<Script Type = Text/JavaScript>
(função(){
var teste = document.getElementById ('teste');
alerta (test.innerhtml);
var resultado = document.getElementById ('resultado');
resultado.innerhtml = test.innerhtml;
alerta (resultado.innerhtml)
}) ();
</script>
Como resultado, descobrir -se -se que o valor HREF do elemento A no resultado.Innerhtml apareceu pela segunda vez nos navegadores IE6 e IE7 se torna o caminho absoluto.
De fato, nossos ancestrais encontraram esses problemas há muito tempo (graças a Yu Bo pelas informações fornecidas):
A solução de processamento foi mencionada no artigo acima, que deve usar o método getAttribute ('href', 2) no IE. A Microsoft estende o segundo parâmetro a esse método, que pode ser definido como 0, 1, 2 e, se definido como 2, o valor original da propriedade é retornado.
O script é corrigido para:
(função(){
var teste = document.getElementById ('teste');
alerta (test.innerhtml);
var resultado = document.getElementById ('resultado');
resultado.innerhtml = test.innerhtml;
if (/*@cc_on!@*/0) {// se ie
var links1 = test.getElementsByTagName ('a');
var links2 = resultado.getElementsByTagName ('a');
for (var i = 0, len = links1.length; i <len; ++ i) {
links2 [i] .href = links1 [i] .getAttribute ('href', 2);
}
}
alerta (resultado.innerhtml);
}) ();
No processo de encontrar esse problema, também procurei um bug interessante encontrado por Hedger Wang: quando o novo valor de atributo href é redefinido no IE, se o texto do link contiver http: // ou @, seu inerhtml será exibido incorretamente e será exibido como o atributo Href.
Solução alternativa (Shref é o novo valor do href a ser definido):
shref = 'http://www.hedgerwow.com';
var ismsie = /*@cc_on!@* /false;
if (ismsie) {
shref = '' + shref;
};
Detalhes: "O Internet Explorer pode redefinir o Innerhtml de Anchor INCERTIVO INCORRETO Quando um novo HREF é atribuído"