Open sorrycc opened 4 years ago
会不会是 polyfill 有些问题,我这边配置 targets 为 { ie: 11 } 之后,可以在 IE 9 里跑了
仔细排查了下,发现和 plugin-model 依赖的 lodash.isequal 有关,他里面有这么一段,
if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
(Map && getTag(new Map) != mapTag) ||
(Promise && getTag(Promise.resolve()) != promiseTag) ||
(Set && getTag(new Set) != setTag) ||
(WeakMap && getTag(new WeakMap) != weakMapTag)) {
// ..
}
其中 new ArrayBuffer(1)
会报错,猜测原因可能是 1) polyfill 有问题 2) ie9 本身对于 ArrayBuffer 的处理问题。
他们引入的补丁方案差异如下,
// ie9
es.array-buffer.constructor { "edge":"13", "ie":"9", "ios":"10", "safari":"10" }
es.array-buffer.is-view { "ie":"9" }
es.array-buffer.slice { "ie":"9", "ios":"10", "safari":"10" }
// ie11
es.array-buffer.constructor { "edge":"13", "ie":"11", "ios":"10", "safari":"10" }
es.array-buffer.slice { "ios":"10", "safari":"10" }
ie9 多一个 is-view 的实现,但看起来不是关键问题。
lodash.isequal 实现太复杂了,尺寸也大,有 50K 左右,换个方案吧。
请问这个问题什么时候可以解决
排查过程
仔细排查了下,发现和 plugin-model 依赖的 lodash.isequal 有关,他里面有这么一段,
if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || (Map && getTag(new Map) != mapTag) || (Promise && getTag(Promise.resolve()) != promiseTag) || (Set && getTag(new Set) != setTag) || (WeakMap && getTag(new WeakMap) != weakMapTag)) { // .. }
其中
new ArrayBuffer(1)
会报错,猜测原因可能是 1) polyfill 有问题 2) ie9 本身对于 ArrayBuffer 的处理问题。他们引入的补丁方案差异如下,
// ie9 es.array-buffer.constructor { "edge":"13", "ie":"9", "ios":"10", "safari":"10" } es.array-buffer.is-view { "ie":"9" } es.array-buffer.slice { "ie":"9", "ios":"10", "safari":"10" } // ie11 es.array-buffer.constructor { "edge":"13", "ie":"11", "ios":"10", "safari":"10" } es.array-buffer.slice { "ios":"10", "safari":"10" }
ie9 多一个 is-view 的实现,但看起来不是关键问题。
建议方案
lodash.isequal 实现太复杂了,尺寸也大,有 50K 左右,换个方案吧。
@sorrycc 请问下有解决方案吗? 升级到哪个plugin-model版本能解决呢?我们急需支持IE
复现步骤,
{ ie: 9 }
禁用 initialState 后正常,