jQuery升級至3.6艱辛過程

 

由於近期負責維護到的網站系統使用到的jQuery版本竟然還在使用1.11的版本(可能是因為有IE相容需求)導致sonatype掃描過程被檢測出安全性問題因而使IE包袱得以卸下。

進行每個網頁升級至最新jQuery版本的需求過程中也遇到很多升級後一堆api沒提供支援的苦惱問題。

有些套件比方像是validationEngine、colorbox只要升級到3.6版jQuery
一堆套件功能好一點可能相應再升級更新版即可獲得解決,
最差情形是整個套件完全沒辦法再使用必須找替換套件。





這裡也分享一下升級的艱辛過程
問題1.$(window).load() api 已經不支援了
程式中若有這樣寫的

1
2
3
4
5
$(window).load(function () {
    //.....
});

$(window).load(js function name);
都要改寫

1
2
3
$(window).on('load', function () {
      //....
});




用到的$(window).load() api自jQUery3.x之後版本就移除了



問題2.涉及到驗證相關透過tip警示(不破壞版型的驗證叮嚀)的替換套件研究

由於原先採用的validationengine在升級後已無法對透過table layout的一些html 輸入相關的tag無法起到跳窗警示,因此只能夠尋找替代的tip顯示套件。



效果










由於我的需求場景是要能夠搭配驗證來秀出來的(不是單純滑鼠過去顯示的)
1.jQuery tip相關插件的api還要能夠可透過程式控制show , hide時機的彈性
2.還要滿足顯示位置除了上下左右還有斜角方位呈現


popup-validation (不採用)

官方DEMO效果看起來跟我需要的有吻合
但美中不足的地方在於顯示位置無法彈性調整
直接去更改 js套件裡面的程式碼也是不被允許的,怕被掃描軟體誤會為被竄改過的腳本,甚至也不透過nuget來配置js第三方,欲社會被多加一些nuget註解,被掃到也被判定有風險。

效果(預設只能從左上角呈現)








tooltipstr (不採用)

jquery.tooltipster.min.js: Uncaught TypeError: Cannot read property 'width' of undefined

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>tooltipster test</title>
    <link rel="stylesheet" type="text/css" href="/css/tooltipster.bundle.css" />
    <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
    <script type="text/javascript" src="/js/tooltipster.bundle.min.js"></script>
    <style>
        .center {
          margin: auto;
          width: 60%;
          border: 3px solid #73AD21;
          padding: 10px;
        }
    </style>
</head>
<body>
    <br>
    <br>
    <div class="center">
        <div>
            <img src="./assets/img/my-image.jpg" class="tooltip" title="This is my image's tooltip message!" />
        </div>
        
        <div>
            <a href="http://calebjacob.com" class="ketchup tooltip" title="This is my link's tooltip message!">Link</a>
        </div>
        

        <div class="tooltip" title="This is my div's tooltip message!"> 
            This div has a tooltip when you hover over it!
        </div>
    </div>
</body>
<script type="text/javascript">
    $(document).ready(function() {
         $('.tooltip').tooltipster({
            content: 'My first tooltip',
            position: 'top'
         });


        //$('.tooltip').tooltipster({
        //   content: 'My first tooltip',
        //   hideOnClick:true,
        //   functionPosition: function(instance, helper, position){
        //    position.coord.top += 10;
        //    position.coord.left += -150;
        //    return position;
        //   }
        //});
        
    });
</script>
</html>


-->測試指定上下左右位置都可以正常
唯獨斜角方位呈現會因為jQuery版本過高不支援....
而官方推薦透過改作標方式也比較麻煩




qtip2 (不採用)
時機控制彈性比較不太好客製調整, 但方位呈現可調整比較完善。
不過目前看起來也不太適合採用
因為官方宣稱已不會再提供維護更新

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>tooltipster test</title>
    
    <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
    <link type="text/css" rel="stylesheet" href="/css/jquery.qtip.min.css" />
    <script type="text/javascript" src="/js/jquery.qtip.min.js"></script>

    <style>
        .center {
          margin: auto;
          width: 60%;
          border: 3px solid #73AD21;
          padding: 10px;
        }
    </style>
</head>
<body>
    <br>
    <br>
    <div class="center">
        <div>
            <img src="./assets/img/my-image.jpg" class="tooltip" title="This is my image's tooltip message!" />
        </div>
        
        <div>
            <a href="http://calebjacob.com" class="ketchup tooltip" title="This is my link's tooltip message!">Link</a>
        </div>
        

        <div class="tooltip" title="This is my div's tooltip message!"> 
            This div has a tooltip when you hover over it!
        </div>
    </div>
</body>
<script type="text/javascript">
    $(document).ready(function() {
        $('.tooltip').qtip({
            content: '測試',
            position: {   
            my: 'bottom left',  // Position my top left...   
            at: 'top right', // at the bottom right of...   
            },
            style: {   
                classes: 'qtip-red' // Make it red... the classic error colour!   
            },
            hide: {
		        event: 'click'
	        }
        });
    });
</script>
</html>


tippy.js (採用)
使用人數眾多,支援呈現方位多元,可客製彈性較多,呈現時機可控制性也具備。





問題3. colorbox.js報錯
真因為 jQuery support apo已經沒有在新版中提供支援了(自2.x之後就沒支援$.support)
colorbox.js   v1.4.4 舊版本(2013-03-10出的)由於有使用到$.support做IE瀏覽器判定
導致邏輯出錯間接引發這項錯誤




引發錯誤的源頭
原本jQuery1.11.2結果使用jQuery ColorBox v1.4.4 - 2013-03-10





升級jQuery3.6後的結果使用jQuery ColorBox v1.4.4 - 2013-03-10


處理方針就是將colorbox.js升級到最新版1.6.4即可避免該錯誤發生



以上是遇到的一些比較麻煩的處理經驗






Ref:
why $(window).load() is not working in jQuery?
https://stackoverflow.com/questions/38650315/why-window-load-is-not-working-in-jquery
jQuery 3.5 Released, Fixes XSS Vulnerability
https://www.infoq.com/news/2020/04/jquery-35-xss-vulnerability-fix/
JQuery 1.2 < 3.5.0 Multiple XSS
https://vulners.com/nessus/JQUERY_CVE-2020-11022.NASL




留言

這個網誌中的熱門文章

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header

經得起原始碼資安弱點掃描的程式設計習慣培養(三)_7.Cross Site Scripting(XSS)_Stored XSS_Reflected XSS All Clients

(2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題