categories: javascript tags: Firefox

如果有使用 My 97 DatePicker 日历控件的话,在项目中可能会遇到一个BUG,如果自身项目有使用 use strict 严格模式的话,在Firefox或IE11下弹不开日历窗口。

打开Firefox控制台,可以看到如下报错:

TypeError: access to strict mode caller function is censored.
复制代码

是在严格模式下使用了caller,该属性在 MDN web docs 有注明:

该特性是非标准的,请尽量不要在生产环境中使用它!

该BUG官方在 My97 DatePicker 4.8 Release [2017-7-30] 中已修复。如不升级,可在旧版本做如下修改:

  • 找到源码中的 WdatePicker.js 文件
  • 找到如下代码(变量名可能不同,可以搜索 caller 字段,全文仅两处):
  • function D(){if(G){func=D.caller;while(func!=null){var $=func.arguments[0];if($&&($+"").indexOf("Event")>=0)return $;func=func.caller}return null}
    
  • if(G){...}...处代码用try-catch包裹,如下:
  • function D(){if(G){try{func=D.caller;while(func!=null){var $=func.arguments[0];if($&&($+"").indexOf("Event")>=0)return $;func=func.caller}}catch(e){}return null}
    

    该解决方案仍源自官方在4.8版本的解法。

    原文链接:My97 DatePicker日历控件在火狐或IE下打不开

    安装掘金浏览器插件