升级到 Chrome 37 正式版后,发现前端应用中所有使用 window.showModalDialog 的地方都抛了异常,调试发现 window 对象下找不到 showModalDialog 方法。原来,Chrome在许久以前就在控制台上提示使用 window.open 加跨window的 postMessage 方法来替代。终于在Chrome 37正式版暴发了,Chrome全面禁用了 showModalDialog 这个API方法,十分坑嗲。
值得庆幸的是,Google公司考虑到尚有许多企业级应用对此API有严重依赖,一时不容易做出完全调整,于是提供我们一个“修改Chrome策略(EnableDeprecatedWebPlatformFeatures)”以使之工作的临时解决方案,或者说是缓冲方案。之所以是说是临时解决方案,主要是基于两点:一是该API最终还是将寿终正寝,被完全删除 (大概时间是到2014-04-30);二是方案本身并非面对普通用户,具有一定的专业性。因此,终极解决方案还是使用 window.open 加 window.postMessage 替代。或者更好的办法是使用 Div 封装的 Dialog。
现在我们分别针对 Window 系统和 Linux 系统来详细描述一下该临时方案。
这里,因为我的系统是 Window7, 所以我们就以 Window 7 为例来说明。
通过“开始”菜单或“Win + R”打开“运行”窗口,并输入 “gpedit.msc” 打开系统的“组策略编辑器”。
右击“Local Computer Policy(本地计算机策略) - Computer Configurateion(计算机配置) - Administrative Template(管理模板)”选择“Add/Remove Template...(增加/删除模板)”打开“Add/Remove Template (增加/删除模板对话框)”,点击增加,选择附件中“policy_templates/windows/adm/en-US”下的 chrom.adm 并确定。
(注意: en-US 为操作系统对应的 Locale 配置。)
展开“Classic Administrative Templates(ADM)(经典管理模板)- Google - Chrome”,在右侧列表中找到“Enable deprecated web platform features (启用过时的Web平台功能)"。
右击,选择“Edit(编辑)”。
在“Enable deprecated web platform features (启用过时的Web平台功能)"对话框中选择“Enable(启用)”。
在“Options(选项)”框中点击“Show(显示)”按钮,输入“ShowModalDialog_EffectiveUntil20150430”(表示设置有效期到2015年4月30日)。
这里,我们以Ubuntu为例进行说明。
Policy configuration files live under /etc/chromium for Chromium, and under/etc/opt/chrome for Google Chrome. There are two sets of policies kept in these directories: one set that is required and mandated by an administrator, and one set that is recommended for users but not required. These two sets live at:/etc/opt/chrome/policies/managed//etc/opt/chrome/policies/recommended/
$ sudo -i$ mkdir /etc/opt/chrome/policies$ mkdir /etc/opt/chrome/policies/managed$ mkdir /etc/opt/chrome/policies/recommended$ chmod -w /etc/opt/chrome/policies/managed
// Policy template for Linux.{ // Enable deprecated web platform features //------------------------------------------------------------------------- // Specify a list of deprecated web platform features to re-enable. This // policy gives administrators the ability to re-enable deprecated web // platform features for a limited time. Features are identified by a string // tag and the features corresponding to the tags included in the list // specified by this policy will get re-enabled. The following tags are // currently defined: - ShowModalDialog_EffectiveUntil20150430 If this policy // is left not set or the list is empty, all deprecated web platform features // will remain disabled. "EnableDeprecatedWebPlatformFeatures": ["ShowModalDialog_EffectiveUntil20150430"]}
$ cp chrome.json /etc/opt/chrome/policies/managed
在 Chrome 中输入“chrome://policies”.
联系客服