最初に再現されたコードを見てください
1、gb2312.htmlファイルはGB2312としてエンコードされています
コードコピーは次のとおりです。
<!doctype html>
<html>
<head>
<title> </title>
<メタcharset = "gb2312"/>
<style>
p {
色:赤;
}
</style>
</head>
<body>
<button onclick = "loadjs( 'utf8.js'、 'utf-8')"> test </button>
<スクリプト>
関数loadjs(src、charset){
var script = document.createelement( 'script');
script.src = src;
script.charset = charset;
var head = document.getElementsByTagname( 'head')[0];
head.AppendChild(スクリプト);
}
</script>
</body>
</html>
2。UTF8.JSファイルエンコーディングはUTF-8です
コードコピーは次のとおりです。
var p = document.createelement( 'p');
p.innerhtml = 'つまり、キャッシュはコードを引き起こします';
document.body.AppendChild(P);
LoadJS関数は、スクリプトを動的に作成し、SRCを設定し、CharSetの後にヘッドに追加します。ここでは、ボタンをクリックするたびにUTF8.jsがページに導入されます。 utf.jsのコードは、P要素を作成してテキストを設定し、ボディに追加します。
最初にボタンをクリックすると、テキストが正常に表示されます。
2回目の後、テキストエンコーディングは正しくありませんでした。
示されているように
スクリプトタグが動的に作成されたスクリプトタグではなく、HTMLページに直接記述されている場合、問題はありません。
コードコピーは次のとおりです。
<script type = "text/javascript" src = "utf8.js" charset = "utf-8"> </scrip>
document.writeを使用してJSリソースをロードすると、バグは発生しません。
コードコピーは次のとおりです。
<スクリプト>
function loadbywrite(url、charset){
var str = '<script type = "text/javascript"' + 'src = "' + url + '" charset = "' + charset + '"> <' + '/script>';
document.write(str);
}
</script>
<スクリプト>
loadbywrite( 'utf8.js'、 'utf-8')
</script>
解決策は、SRCおよびcharset属性の割り当て順序を置き換えることです。
コードコピーは次のとおりです。
script.charset = charset;
script.src = src;
つまり、最初にcharsetに値を割り当てます。