IE11环境下DNN页面2sxc应用编辑功能失效问题求助
嘿,我之前处理过类似的IE11和2sxc兼容问题,咱们来拆解一下解决办法:
首先,这个报错SCRIPT438: Object doesn't support property or method 'assign'本质是IE11不支持ES6的Object.assign()方法,而2sxc的inpage.min.js脚本里用到了这个API。再加上浏览器返回HTTP/1.1 304 Not Modified,说明你的IE11缓存了旧版的、没做IE兼容处理的JS文件,所以一直用的是有问题的缓存文件,没加载到可能修复了兼容的新版本。
我给你几个递进的解决步骤,你可以依次尝试:
1. 强制刷新浏览器缓存
首先试试在IE11里按Ctrl + F5强制刷新页面——这个操作会绕过本地缓存,重新从服务器加载所有资源,包括inpage.min.js。如果你的2sxc模块已经是较新版本(内置了IE兼容补丁),这一步大概率就能解决问题。
2. 手动添加Object.assign的Polyfill
如果强制刷新后还是报错,说明当前使用的2sxc版本没有内置IE11兼容处理,那咱们手动补一个Polyfill就行。你可以在DNN页面的<head>标签里添加这段代码:
if (typeof Object.assign != 'function') { Object.defineProperty(Object, "assign", { value: function assign(target, varArgs) { 'use strict'; if (target == null) { throw new TypeError('Cannot convert undefined or null to object'); } var to = Object(target); for (var index = 1; index < arguments.length; index++) { var nextSource = arguments[index]; if (nextSource != null) { for (var nextKey in nextSource) { if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { to[nextKey] = nextSource[nextKey]; } } } } return to; }, writable: true, configurable: true }); }
这段代码会在IE11环境下自动补上Object.assign的实现,让2sxc的脚本能正常执行。
3. 升级2sxc模块到最新稳定版
如果上面的临时修复都不管用,建议你把2sxc桌面模块升级到最新的稳定版本。新版本的2sxc通常会考虑到旧浏览器(比如IE11)的兼容问题,可能已经内置了必要的Polyfill或者重写了不兼容的API调用。
毕竟IE11已经是非常老旧的浏览器了,如果项目允许的话,也可以考虑引导用户切换到Chrome、Edge这类现代浏览器,能从根源上避免很多这类兼容问题。
内容的提问来源于stack exchange,提问作者mercer gaurav

