Bootstrap 4.1模态框报错‘Error: Object.keys: argument is not an Object’求助
我之前处理过不少Bootstrap版本升级后IE兼容性的问题,结合你遇到的Object.keys: argument is not an Object报错,大概率是以下几个原因导致的:
Bootstrap 4.1的IE11兼容性逻辑变化
Bootstrap 4.1在组件实现上调整了部分对象处理逻辑,而IE11对ES5+ API的支持有局限性——比如Object.keys()在IE11中如果传入非对象(undefined、null或原始值)会直接抛出错误,而Bootstrap 4.0可能做了更宽松的兼容兜底。当你调用$('#PopupModalData').modal()时,内部处理某个配置项或DOM关联对象时,可能传入了非对象值触发了这个报错。模态框DOM结构不符合Bootstrap 4.1要求
检查你的#PopupModalData模态框DOM结构是否完整合规,比如是否缺失了.modal、.modal-dialog、.modal-content这些核心层级,或者必要的属性(如data-toggle)。升级后Bootstrap对DOM结构的校验更严格,若结构缺失,内部获取元素相关对象时可能返回null,进而传入Object.keys()触发错误。jQuery版本不匹配
Bootstrap 4.1对jQuery的版本要求比4.0更高,官方推荐使用jQuery 3.3.1及以上版本,且不能用slim版(它缺少Bootstrap依赖的部分方法)。如果你仍在使用旧版jQuery,在IE11中可能出现对象返回结果不符合Bootstrap 4.1预期的情况,导致内部拿到非对象值触发报错。自定义脚本或第三方插件冲突
若你在模态框初始化前后有自定义脚本修改配置或DOM元素,升级后Bootstrap内部逻辑的变化可能导致这些自定义代码传入了不符合要求的值。比如你可能在调用modal()前将某个配置项改为非对象类型,或者覆盖了Bootstrap的内部方法,最终让Object.keys()接收到无效参数。
快速排查建议
- 打开IE11开发者工具的控制台,查看报错堆栈,定位到Bootstrap模态框源码中触发错误的具体行,这能帮你精准锁定问题点。
- 暂时移除所有自定义脚本和第三方插件,只保留Bootstrap 4.1和符合要求的jQuery,测试基础模态框是否能正常启动,排除自定义代码的干扰。
- 对比Bootstrap 4.0与4.1的模态框源码差异,重点关注使用
Object.keys()的对象处理逻辑。 - 确认IE11未开启兼容模式(开发者工具→文档模式),兼容模式会引发更多诡异的JS兼容性问题。
内容的提问来源于stack exchange,提问作者gchq

