1/** 2 * å®¢ææ©å¨äººåµå ¥è ³æ¬ 3 * 4 * åå§ä¾æºï¼https://chatbot.nitori-net.tw/wise/script/webchat-embed.js 5 * ä¸è¼æ¥æï¼2026-05-06 6 * 7 * ä¿®æ¹è¨éï¼ 8 * [å®å ¨æ§] resizeFrontEndIframeãinjectToEndOfBodyãtoggleFrontEndIframe 9 * 忬çºé±å¼å ¨åè®æ¸ï¼implicit globalï¼ï¼å·²å ä¸ var 宣åéå¶å¨ IIFE ä½ç¨åå §ï¼ 10 * é¿å 污æ window ç©ä»¶ï¼é²æ¢èå°æ¡å ¶ä»ç¨å¼ç¢¼ç¼çå½åè¡çªã 11 * [å®å ¨æ§] $this = $(this) 忬çºé±å¼å ¨åè®æ¸ï¼å·²æ¹çº var $this = $(this)ã 12 * [ä¿®æ£] å° $this.click() ç´æ¥ç¶å®æ¹çº $(document).on() event delegationï¼ 13 * é¿å React re-render æ¿æ DOM å ç´ å¾ click handler 失æå°è´æéç¡åæã 14 * [ä¿®æ£] injectToEndOfBody å å ¥é²éè¤æ³¨å ¥å¤æ·ï¼é¿å 夿¬¡å¼å«ç¢çå¤å wrapperã 15 * [ä¿®æ£] resizeFrontEndIframe ä¸ max-width æ¸å¼ç± '100' ä¿®æ£çº '100%'ã 16 * [æè½] ééè天è¦çªæä¸åæ¸ é¤ iframe srcï¼æ¹çºå é±è wrapperï¼ 17 * 馿¬¡éåä»çºæ¶è¼å ¥ï¼ç¬¬äºæ¬¡èµ·éåçºç¬é顯示ã 18 */ 19(function ($) { 20 var webchatUrl; 21 var triggerSelector; 22 23 var resizeFrontEndIframe = function () { 24 if ($('.front-end-iframe-wrapper').css('display') == 'block') { 25 if ($(window).width() <= 480) { 26 $('.front-end-iframe-wrapper').css('max-height', '90%'); 27 $('.front-end-iframe-wrapper').css('max-width', '100%'); 28 $('.front-end-iframe-wrapper').css('height', '100%'); 29 $('.front-end-iframe-wrapper').css('width', '100%'); 30 $('.front-end-iframe-wrapper').css('bottom', 0); 31 $('.front-end-iframe-wrapper').css('right', 0); 32 $('.btn-close-front-end-iframe').css('top', 5); 33 $('.btn-close-front-end-iframe').css('right', 5); 34 } else { 35 $('.front-end-iframe-wrapper').css('height', '90%'); 36 $('.front-end-iframe-wrapper').css('bottom', 10); 37 $('.front-end-iframe-wrapper').css('right', 50); 38 } 39 } 40 }; 41 42 var injectToEndOfBody = function () { 43 if ($('#front-end-iframe-wrapper').length > 0) { 44 return; 45 } 46 $('body').append( 47 $( 48 '<div id="front-end-iframe-wrapper" class="front-end-iframe-wrapper"><div class="btn-close-front-end-iframe fas fa-times fa-lg"></div><iframe name="front-end-iframe" src="about:blank" width="400" height="600" frameborder="0" scrolling="auto" class="front-end-iframe"></iframe></div>', 49 ), 50 ); 51 }; 52 53 var toggleFrontEndIframe = function () { 54 if ($('.front-end-iframe-wrapper').css('display') == 'block') { 55 $('.front-end-iframe-wrapper').css('display', 'none'); 56 $('.btn-close-front-end-iframe').css('display', 'none'); 57 } else { 58 if ($('.front-end-iframe-wrapper iframe').attr('src') === 'about:blank') { 59 $('.front-end-iframe-wrapper iframe').attr('src', webchatUrl); 60 } 61 $('.front-end-iframe-wrapper').css('display', 'block'); 62 $('.btn-close-front-end-iframe').css('display', 'block'); 63 resizeFrontEndIframe(); 64 } 65 }; 66 67 $(document).on('click', '.btn-close-front-end-iframe', toggleFrontEndIframe); 68 69 $.fn.bindWebchat = function (url) { 70 webchatUrl = url; 71 72 this.each(function () { 73 triggerSelector = this.id ? '#' + this.id : null; 74 75 injectToEndOfBody(); 76 77 $(window).on('resize', resizeFrontEndIframe); 78 }); 79 80 if (triggerSelector) { 81 $(document) 82 .off('click.webchat') 83 .on('click.webchat', triggerSelector, toggleFrontEndIframe); 84 } 85 }; 86 87 /** 88 * å ¬é APIï¼window.NitoriChatbot 89 * æä¾å¤é¨ç¨å¼ç¢¼ï¼React å ä»¶ãä»»ä½ JSï¼ééå®¢ææ©å¨äººã 90 * 91 * ç¨æ³ï¼ 92 * window.NitoriChatbot.open() // å¼·å¶éå 93 * window.NitoriChatbot.close() // å¼·å¶éé 94 * window.NitoriChatbot.toggle() // åæé/é 95 */ 96 window.NitoriChatbot = { 97 open: function () { 98 if ($('.front-end-iframe-wrapper').css('display') !== 'block') { 99 toggleFrontEndIframe(); 100 } 101 }, 102 close: function () { 103 if ($('.front-end-iframe-wrapper').css('display') === 'block') { 104 toggleFrontEndIframe(); 105 } 106 }, 107 toggle: function () { 108 toggleFrontEndIframe(); 109 }, 110 }; 111})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.