众所周知,Bootstrap是来自 Twitter 的基于HTML、CSS、JavaScript 的、移动设备优先的、并被所有主流浏览器支持的、用于快速开发 web 应用程序和网站的前端框架。
最近也打算用Bootstrap 的组件开发自己的网页,为了统一风格,用到了 silviomoreto 提供的 Bootstrap 风格的select 控件,但遇到了一个问题,那就是 Bootstrap-select 可以在 Chrome 35 上正常显示并使用,但在 IE8 却无法显示,代码如下:
<!DOCTYPE html>
<html>
<head>
<title>Test Bootstrap example!</title>
<link href="Styles/bootstrap.css" rel="stylesheet" type="text/css" />
<link href="Styles/bootstrap-select.min.css" rel="stylesheet" type="text/css" />
<!-- Optional theme -->
<script src="Scripts/jquery-1.11.1.min.js" type="text/javascript"></script>
<script src="Scripts/bootstrap.min.js" type="text/javascript"></script>
<script src="Scripts/bootstrap-select.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
$('.selectpicker').selectpicker();
$('.selectpicker').selectpicker({
style: 'btn-info',
size: 4
});
});
</script>
</head>
<body>
<select class="selectpicker">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
</body>
</html>
用 IE8 打开发现是这句话出错:
$('.selectpicker').selectpicker();
原以为是 IE8 本身对 Bootstrap 的兼容性不好,所以加入了以下 js 文件:
<script src="Scripts/html5shiv.js" type="text/javascript"></script>
<script src="Scripts/respond.min.js" type="text/javascript"></script>
但还是没有效果,然后就在 Google 上搜,发现是这个错误:
There is an error in the htmlEscape function; IE8 says
Message: Object doesn't support this property or method
Line: 63
Char: 5
Code: 0
URI: bootstrap-select/js/bootstrap-select.js
Line 63 is
var source = '(?:' + Object.keys(escapeMap).join('|') + ')',
Solution would be to add a polyfill for browsers that don't support Object.keys()
Object.keys = Object.keys || function(
o, // object
k, // key
r // result array
) {
// initialize object and result
r = [];
// iterate over object keys
for (k in o)
// fill result array with non-prototypical keys
r.hasOwnProperty.call(o, k) && r.push(k);
// return result
return r
};
就是在 bootstrap-select.min.js 里无法解析 Object.keys() 对象,我们在该 js 文件的后面加上对它的解析方法就行了, OK,问题已经解决了!