My97 DatePicker日曆控制元件在火狐或IE下打不開

夜起葉落發表於2018-03-26

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]中已修復。如不升級,可在舊版本做如下修改:

  1. 找到原始碼中的WdatePicker.js檔案
  2. 找到如下程式碼(變數名可能不同,可以搜尋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}
複製程式碼
  1. 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下打不開

相關文章