IE8下Polyfill实现遇问题:Object不支持该属性或方法求助
解决IE8中
Object doesn't support this property or method错误 让我们一步步拆解并解决你遇到的问题:
问题核心原因
首先看你代码里触发错误的关键行:
var optgroup_id = optgroup_ids.substr(0, optgroup_ids.lastIndexOf(optgroup_ids,'_'));
这里有两个关键问题:
lastIndexOf参数顺序完全搞反了:字符串的lastIndexOf方法正确用法是string.lastIndexOf(要查找的子串[, 起始位置]),你把要找的'_'放在了第二个参数位,反而把原字符串optgroup_ids当成了搜索目标——这在现代浏览器里会返回不符合预期的结果,而IE8里直接触发了兼容性错误。- 你添加的Polyfill是给数组的
lastIndexOf用的,但你这里调用的是字符串的lastIndexOf,所以这个Polyfill完全没起作用。不过其实IE8本身是支持字符串lastIndexOf的,所以真正的元凶是参数顺序错误。
修复方案
1. 修正lastIndexOf的参数顺序
把错误的调用改成正确的形式,这是解决当前问题的核心:
var optgroup_id = optgroup_ids.substr(0, optgroup_ids.lastIndexOf('_'));
这样就能正确定位到最后一个下划线的位置,截取你需要的子串了。
2. (可选)确保数组lastIndexOf的Polyfill生效
如果你的代码其他地方用到了数组的lastIndexOf,你现有的Polyfill写法是没问题的,但一定要确保它在所有使用数组lastIndexOf的代码之前加载执行。不过针对你当前的错误,这个Polyfill并不是必需的。
验证修改
调整代码后,在IE8中测试,应该不会再出现Object doesn't support this property or method的报错,同时Chrome和Firefox的原有功能也能正常保持。
内容的提问来源于stack exchange,提问作者Ankit Mishra
相关产品推荐
相关产品推荐

