1/** 2 * jQuery .load() ê°ë (DEMO-1291) 3 * 4 * - ìëë¦¬ì¤ A (ì기-page ì기-load): ë¸ë¼ì°ì ìì ìì²ì ì¦ì cancel + console ì¬ì ì¶ë ¥. 5 * - ê·¸ ì¸ same-origin .load(): X-Imweb-JQ-Load ë§ì»¤ í¤ëë§ ë¶ì°© (ìë² ê´ì¸¡ì©). 6 * 7 * ë°°ê²½: 8 * DEMO-1291 ë°ì ì¬ê³ â ì½ëìì ¯ì ë°í $("#bag").load("/shop_cart") ê° ì¬ì´í¸ ì ì²´ 9 * 무íë¡ë©ì ì ë°. .load() ê° ìëµ HTML ì inline <script> 를 ì½ë°± ì¤í ì ì ì¦ì 10 * íê°í´ë²ë ¤ ìì±ìê° ì½ë°±ìì .remove() ë¡ script 를 ì§ìë ì´ë¯¸ ì¤íë¨. 11 * 12 * ìëë¦¬ì¤ A (selector ìë ì기-page ì기-load) â í´ë¼ì´ì¸í¸ ì°¨ë¨: 13 * íì¬ íì´ì§ P ì ìì ¯ì´ .load(P) ë¡ ì기 ìì ì ë¤ì ëì´ì¤ë©´, ìëµ ìì ê°ì ìì ¯ì´ 14 * ë .load(P) 를 í¸ì¶ â 무í ì¬ê· + ì¤í¬ë¦½í¸ ì¤ë³µ ì¤í. ê°ì¥ ì§ì ì ì¸ ì¬ê³ í¨í´. 15 * ë¨, .load("P #selector") ì²ë¼ selector ì 미ì¬ê° ìì¼ë©´ jQuery ê° ìëµì <script> 를 16 * ì ê±° í 주ì íë¯ë¡ ì¬ê· ìíì´ ìë¤ â ì°¨ë¨íì§ ìê³ ë§ì»¤ë§ ë¶ì°©(ì ì ì¹ì ê°±ì í¨í´). 17 * resolveLoadPath(url) ì´ íì¬ íì´ì§ path ì ê°ê³ selector ê° ìì¼ë©´: 18 * 1. ì본 .load 를 í¸ì¶íì§ ìëë¤ â ìëµì DOM ì ì½ì íì§ ìì¼ë¯ë¡ ì¬ê·/ì¤í¬ë¦½í¸ 19 * ì¬ì¤íì ìì² ì°¨ë¨. 20 * 2. console.error ë¡ ì°¨ë¨ ì¬ì ì¶ë ¥. 21 * 3. Network í ê°ìì±ì ìí´ ìì²ì ëì°ìë§ì abort â (canceled) ë¡ íì. 22 * (ì´ throwaway ìì²ì ìëµì ì ë ì¬ì©/ì½ì íì§ ìëë¤ â ì§ë¨ íì ì©ë.) 23 * 24 * ë§ì»¤ (ìëë¦¬ì¤ A ê° ìë same-origin .load()): 25 * .load(url, ...) ì url 첫 공백 ì í í°ì URL ë¡ í´ìíì¬ same-origin ì´ë©´ pathname ì 26 * X-Imweb-JQ-Load í¤ëë¡ ë¶ì°©. ìë²ì¸¡ self_recursion_guard.sub ê´ì¸¡ì©. 27 * cross-origin / URL parse ì¤í¨ / ë¹ë¬¸ìì´ url ì 미ë¶ì°© (ì¬ê³ í¨í´ ë²ì ë°). 28 * 29 * ë¡ë ìì¹: 30 * html/common/class/site_page.cls ì header_js ë°°ì´ì jQuery ì§í ë±ë¡. 31 * head ìììì jQuery ì§í ë기 ë¡ë â ì¬ì´í¸ ì½ëìì ¯ inline script ê° .load() í¸ì¶í기 ì í¨ì¹ ìë£. 32 * 33 * íê³: 34 * - jQuery ê° ìë fetch/XMLHttpRequest ì§ì ì¬ì©í ì½ëìì ¯ì 미ì ì©. 35 * - ì½ëìì ¯ ìì±ìê° $.fn.load 를 ë¤ì ë®ì´ì°ë©´ ì°í ê°ë¥ (ëë). 36 * - jQuery ë¡ë ì ì ì¤íëë ì½ë (jQuery ë³´ë¤ ë¨¼ì ë¡ëë ì¸ë¶ SDK ë±) ë 못 ì¡ì. 37 * - URL ìì±ì 미ì§ì íê²½ (구í ë¸ë¼ì°ì ) ì 미ì ì© (ì¬ì´í¸ ëì ìí¥ ìì). 38 * - ìëë¦¬ì¤ B (ë¤ë¥¸ íì´ì§ Q ìì .load(P)) ë ì기-page 매ì¹ì´ ì ë¨ â 본 ê°ë ë²ì ë°. 39 */ 40(function ($) { 41 if (!$ || !$.fn || typeof $.fn.load !== 'function' || typeof $.ajaxPrefilter !== 'function') { 42 return; 43 } 44 45 var origLoad = $.fn.load; 46 var IN_LOAD = ''; 47 48 // path ì ê·í â ìë¤ ì¬ëì ì ê±° í ë¨ì¼ ì í ì¬ëì. ìë² self_recursion_guard.sub ì 49 // `'/' . trim($path, '/')` ì ëì¼ ê·ì¹ì¼ë¡ ë§ì¶° ì기-page íì ì ì¼ì¹ìí¨ë¤. 50 function normPath(p) { 51 return '/' + String(p == null ? '' : p).replace(/^\/+|\/+$/g, ''); 52 } 53 54 function resolveLoadPath(url) { 55 if (typeof url !== 'string' || url === '') { 56 return ''; 57 } 58 // `.load("/path #selector")` íì ì§ì â 첫 공백 ì í í°ë§ URL 59 var firstToken = url.split(/\s+/)[0]; 60 if (!firstToken) { 61 return ''; 62 } 63 try { 64 var absolute = new URL(firstToken, location.href); 65 // cross-origin .load ë ì¬ê³ í¨í´ ë²ì ë° 66 if (absolute.host !== location.host) { 67 return ''; 68 } 69 return absolute.pathname || ''; 70 } catch (e) { 71 return ''; 72 } 73 } 74 75 // selector ì ë¯¸ì¬ ì 무 â `.load("url selector")` íì. selector ê° ìì¼ë©´ jQuery ê° 76 // ìëµì <script> 를 ì ê±° í 주ì íë¯ë¡(ì¤í ì ë¨) ì¬ê· ìíì´ ìë¤ â ì°¨ë¨ ì ì¸ íì ì ì¬ì©. 77 function hasSelectorSuffix(url) { 78 if (typeof url !== 'string') { 79 return false; 80 } 81 var parts = url.trim().split(/\s+/); 82 return parts.length > 1 && parts.slice(1).join('') !== ''; 83 } 84 85 // ìëë¦¬ì¤ A ì°¨ë¨ ì Network ì (canceled) íì ë§ ë¨ê¸°ë throwaway ìì². 86 // ìëµì ì ë ì¬ì©íì§ ìëë¤ (open â send â ì¦ì abort). 87 function emitCanceledTrace(rawUrl) { 88 try { 89 var firstToken = String(rawUrl).split(/\s+/)[0]; 90 var xhr = new XMLHttpRequest(); 91 xhr.open('GET', firstToken, true); 92 try { 93 xhr.setRequestHeader('X-Imweb-JQ-Load-Blocked', '1'); 94 } catch (e) {} 95 xhr.send(); 96 xhr.abort(); 97 } catch (e) {} 98 } 99 100 $.fn.load = function (url) { 101 // $(window).load(handler) event (jQuery 1.x í¸í) â íµê³¼ 102 if (typeof url === 'function') { 103 return origLoad.apply(this, arguments); 104 } 105 106 var path = resolveLoadPath(url); 107 108 // ìëë¦¬ì¤ A: selector ìë ì기-page ì기-load â í´ë¼ì´ì¸í¸ ì°¨ë¨. 109 // selector ê° ìì¼ë©´ jQuery ê° script 를 ì ê±°íë¯ë¡ ì¬ê· ìí ìì â íµê³¼(ë§ì»¤ë§). 110 if (path && !hasSelectorSuffix(url) && normPath(path) === normPath(location.pathname)) { 111 if (window.console && typeof console.error === 'function') { 112 console.error( 113 '[DEMO-1291] ì기 íì´ì§ ì¬ê· .load() ì°¨ë¨: ' + normPath(path) + 114 ' â ì기 ìì ì ajax ë¡ ë¤ì ë¶ë¬ì¤ë©´ ìëµ ìì <script> ê° ì¬ì¤íëì´ ' + 115 '무í ì¬ê·ì ì¤ë³µ ì´ê¸°í를 ì ë°í©ëë¤. (ìì²ì ì·¨ìíìµëë¤)' 116 ); 117 } 118 emitCanceledTrace(url); 119 // ì본 .load 미í¸ì¶ = ìëµ DOM ì½ì /ì¤í¬ë¦½í¸ ì¬ì¤í ìì² ì°¨ë¨. ì²´ì´ë ìí´ this ë°í. 120 return this; 121 } 122 123 // ê·¸ ì¸ same-origin .load() â ë§ì»¤ë§ ë¶ì°© (ìë² ê´ì¸¡ì©) 124 // ë§ì»¤ë normPath ë¡ ì ê·í â ìë² self_recursion_guard.sub ì trim ê·ì¹ê³¼ ëì¼ ííë¡ ì í. 125 // path ê° '' (cross-origin / íì± ì¤í¨) ì´ë©´ ë§ì»¤ 미ë¶ì°© ì ì§. 126 var prev = IN_LOAD; 127 IN_LOAD = path ? normPath(path) : ''; 128 try { 129 return origLoad.apply(this, arguments); 130 } finally { 131 IN_LOAD = prev; 132 } 133 }; 134 135 $.ajaxPrefilter(function (options, originalOptions, jqXHR) { 136 if (IN_LOAD) { 137 jqXHR.setRequestHeader('X-Imweb-JQ-Load', IN_LOAD); 138 } 139 }); 140})(window.jQuery || window.$);
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.