Veja o código reproduzido primeiro
1, GB2312.html O arquivo é codificado como GB2312
A cópia do código é a seguinte:
<! Doctype html>
<html>
<head>
<Title> </title>
<meta charset = "gb2312"/>
<estilo>
P {
Cor: vermelho;
}
</style>
</head>
<Body>
<button onclick = "loadjs ('utf8.js', 'utf-8')"> teste </butut>
<Cript>
função loadjs (src, charset) {
var script = document.createElement ('script');
script.src = src;
script.charset = charset;
var head = document.getElementsByTagName ('Head') [0];
head.appendChild (script);
}
</script>
</body>
</html>
2. Utf8.js A codificação do arquivo é UTF-8
A cópia do código é a seguinte:
var p = document.createElement ('p');
p.innerhtml = 'ie cache causa código ilegal';
document.body.appendChild (P);
A função loadjs cria dinamicamente um script, define SRC e a adiciona à cabeça após o Charset. Aqui, cada clique do botão apresentará UTF8.js na página. O código no utf.js criará um elemento P para definir um texto e depois adicioná -lo ao corpo.
Quando você clica no botão pela primeira vez, o texto será exibido normalmente.
Após a segunda vez, a codificação do texto estava incorreta.
Como mostrado
Se a tag de script não for uma tag de script criada dinamicamente e for gravada diretamente na página HTML, não há problema.
A cópia do código é a seguinte:
<script type = "text/javascript" src = "utf8.js" charset = "utf-8"> </script>
Se você usar o Document.Write para carregar os recursos JS, o bug não ocorrerá.
A cópia do código é a seguinte:
<Cript>
função loadByWrite (url, charset) {
var str = '<script type = "text/javascript"' + 'src = "' + url + '" charset = "' + charset + '"> <' + '/script>';
document.write (str);
}
</script>
<Cript>
LoadByWrite ('utf8.js', 'utf-8')
</script>
A solução é substituir a ordem de atribuição dos atributos SRC e Charset.
A cópia do código é a seguinte:
script.charset = charset;
script.src = src;
Ou seja, atribua um valor ao charset primeiro.