title: My97 DatePicker日曆控制元件在火狐或IE下打不開 date: 2018-02-05 22:29:07 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版本的解法。