这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
这篇文章主要介绍了动态创建 script 在 IE 中缓存 js 文件时导致编码的解决方法, 需要的朋友可以参考下
先看下重现代码
1, gb2312.html 该文件编码为 gb2312
- <!DOCTYPE html>
- <html>
- <head>
- <title>
- </title>
- <meta charset="gb2312" />
- <style>
- p { color: red; }
- </style>
- </head>
- <body>
- <button onclick="loadJS('utf8.js', 'utf-8')">
- 测试
- </button>
- <script>
- function 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 该文件编码是 utf-8
- var p = document.createElement('p');
- p.innerHTML = 'IE缓存导致乱码';
- document.body.appendChild(p);
loadJS 函数动态创建一个 script,设置 src,charset 后添加到 head 中。这里每次点击按钮会将 utf8.js 引入到该页面中,utf.js 内代码会创建一个 p 元素设置一段文本,然后添加到 body 上。
第一次点击按钮,文字显示正常。
第二次后,文字编码不正确了。
如图
如果不是动态创建的 script tag,直接写在 html 页面上,则没有此问题。
- <script type="text/javascript" src="utf8.js" charset="utf-8"></script>
如果采用 document.write 方式载入 js 资源也不会出现该 bug
- <script>
- function loadByWrite(url, charset) {
- var str = '<script type="text/javascript"' + ' src="' + url + '" charset="' + charset + '"><' + '/script>';
- document.write(str);
- }
- </script>
- <script>
- loadByWrite('utf8.js', 'utf-8')
- </script>
解决方式是换下 src 和 charset 属性的赋值顺序。
- script.charset = charset;
- script.src = src;
即先给 charset 赋值。
(adsbygoogle = window.adsbygoogle || []).push({});
来源: http://www.phperz.com/article/17/0629/276134.html