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
留言
張貼留言