/g,"").replace(/\//g,""),typeof clickList=="object"){let time=calculateVisitTime();event.isTrusted?clickList.push({lastClickDom,time,type:"User manual click"}):clickList.push({lastClickDom,time,type:"Program click"}),clickList=clickList?JSON.stringify(clickList).substring(0,2e3):[]}},!0),window.addEventListener("error",function(e){if(isBlocked)return!1;stringToLower(e.target.tagName)==="img"&&e.target.src&&holderFile(e.target.src)?loadFailed.filter(item=>item.src===e.target.src).length===0&&loadFailed.push({type:"img_load_error",src:e.target.src}):stringToLower(e.target.tagName)==="script"&&e.target.src&&holderFile(e.target.src)?loadFailed.filter(item=>item.src===e.target.src).length===0&&loadFailed.push({type:"js_load_error",src:e.target.src}):stringToLower(e.target.tagName)==="link"&&e.target.href&&holderFile(e.target.href)&&loadFailed.filter(item=>item.src===e.target.href).length===0&&loadFailed.push({type:"css_load_error",src:e.target.href})},!0),window.onerror=function(errorMessage,scriptURI,lineNumber,columnNumber,errorObj){if(!scriptURI&&!errorObj||scriptURI&&scriptURI.indexOf("chrome-extension")!==-1||isBlocked)return;if(errorObj){const securityError=/SecurityError/i.test(errorObj),getItemError=/getItem/i.test(errorObj),setItemError=/setItem/i.test(errorObj),serviceWorkerError=/evaluating 'navigator.serviceWorker.register'/i.test(errorObj);if(securityError||setItemError||getItemError||serviceWorkerError)return}const hasSignificanceError=errorSignificanceMessageInfo.some(sign=>errorMessage.includes("Unexpected token "+sign)||errorMessage.includes("unexpected token"+sign)||errorMessage.includes("Unterminated string")||errorMessage.includes("Expected property name")||errorMessage.includes("Cannot convert undefined or null to object"));let networkSendStatus=!1;["4g","5g","wifi"].some(item=>navigatorConnection?.effectiveType.includes(item))&&!navigatorConnection?.saveData&&(networkSendStatus=!0),hasSignificanceError&&isChromeNeedCall&&networkSendStatus&&(console.log("%c"+`dom=${lastClickDom} message=${errorMessage}`,"background: rgba(130,189,174,0.8); color: #fff; font-size: 18px; padding: 2px 10px;"),errorSignificanceMessageArr.push({errorMessage,errorType:"significance",pageType:"",scriptURI:scriptURI?scriptURI.replace(/[?#].*$/,""):"",domMessage:lastClickDom,errorObj:errorObj.toString(),lineNumber,columnNumber,...otherInfo()}),lastClickDom=""),isChromeNeedCall&&(console.log("%c"+`dom=${lastClickDom} message=${errorMessage}`,"background: rgba(130,189,174,0.8); color: #fff; font-size: 14px; padding: 2px 10px;"),errorMessageArr.push({errorMessage,scriptURI:scriptURI?scriptURI.replace(/[?#].*$/,""):"",lineNumber,columnNumber,errorObj:errorObj.toString(),...otherInfo()}),errorMessageArr=errorMessageArr.filter(obj=>typeof obj.errorObj=="string"&&!obj.errorObj.includes("ReferenceError: Vue is not defined")&&!obj.errorObj.includes("SyntaxError: Unexpected end of JSON input")))},window.addEventListener("load",function(){let mergeErrorMessage=errorMessageArr.concat(errorSignificanceMessageArr);fileLoadFailedFun(),jsExceptionFun(mergeErrorMessage),setPageLoadTimestamp(),checkPageUrl()});function setPageLoadTimestamp(){document.body.setAttribute("data-load-time",(new Date).toLocaleString())}function abuttingJointFramework(c){if(c&&c.textStatus&&c.textStatus==="error"){let r={};r.handler=c.context.handler,r.errorObj=JSON.stringify(c.context.options),r.errorMessage=c.dataOrXhr.responseText,r.errorType="request error",r.pageType="",c.errorMessage&&monitorFrontError(r)}}function calculateVisitTime(){let endTime=new Date;return(endTime-startTime)/1e3+"s"}function checkPageUrl(){location.pathname.includes(location.protocol)&&typeof monitorFrontError=="function"&&monitorFrontError({errorMessage:"The current page pathname contains the protocol",pageUrl:window.location.href,warning_message_code:"dingtalk_front_pageurl_error"})}function fileLoadFailedFun(){loadFailed.length>0&&monitorFrontFilesFailed({filesInfo:loadFailed,...otherInfo()}).then(result=>{result&&fileLoadFailedRequestFun(result)}).catch(error=>{console.error(error)})}function fileLoadFailedRequestFun(loadFailedRes){let jqueryFailed=!1,loadFailedFileArray=[];if(loadFailedRes=loadFailedRes?JSON.parse(loadFailedRes):[],loadFailedRes.length>0){for(const k of loadFailedRes)k.src.includes("jquery-")&&k.type==="js_load_error"&&(jqueryFailed=!0),loadFailedFileArray.push(k.src);loadFailedFileArray=loadFailedFileArray.filter((item,index,self)=>self.indexOf(item)===index);let errorMessage=jqueryFailed?"The current page jQuery file does not exist":"Some resource files do not exist";monitorFrontError({errorMessage,pageUrl:window.location.href,pageType:jqueryFailed?"":"",files:loadFailedFileArray,...otherInfo()})}}function jsExceptionFun(errorMessageArr){for(const k of errorMessageArr)k.scriptURI.indexOf(location.origin)>=0&&getErrorSendTo("",k.lineNumber,k,!0)}function handleResourceError(errorMessage,resourceSrc){monitorFrontError({errorMessage,pageUrl:window.location.href,src:resourceSrc,...otherInfo()})}function getWebPageSource(url){return new Promise(function(resolve,reject){let xhr=new XMLHttpRequest;xhr.open("GET",url),xhr.onload=function(){xhr.status===200?resolve(xhr.responseText):reject("HTTP request failed with status code "+xhr.status)},xhr.onerror=function(){reject("Error fetching web page")},xhr.send()})}function processHtmlSourceCode(htmlSourceCode,targetLineNumber,pageTextType,info){if(pageTextType==="html"){const parser=new DOMParser,doc=parser.parseFromString(htmlSourceCode,"text/html"),lines=doc.documentElement.innerHTML.split(` `);getErrorSendTo(lines,targetLineNumber,info)}if(pageTextType==="js"){const lines=htmlSourceCode.split(` `);getErrorSendTo(lines,targetLineNumber,info)}}function getErrorSendTo(lines="",targetLineNumber=0,dataJson,notChecked=!1){let signNum=30,maxCodeLength=2e3;if(!notChecked){if(lines===""||targetLineNumber===0)return!1;if(lines!==""){let code="";for(let k=0;k{xhrRequestError({method:"POST",url:window.location.href,headers:{"Content-Type":"application/json","X-October-Request-Handler":"onGetFrontInfo","X-Requested-With":"XMLHttpRequest"},data:dataJson}).then(function(response){resolve(response)}).catch(function(error){console.error(error),reject(error)})})}function monitorFrontError(dataJson,isShow=1){xhrRequestError({method:"POST",url:window.location.href,headers:{"Content-Type":"application/json","X-October-Request-Handler":"onMonitorFrontError","X-Requested-With":"XMLHttpRequest"},data:dataJson}).then(function(){isShow&&showErrorNotification(dataJson.errorType||"JsError",dataJson.errorMessage)}).catch(function(error){console.error(error)})}function monitorFrontFilesFailed(dataJson){return new Promise((resolve,reject)=>{xhrRequestError({method:"POST",url:window.location.href,headers:{"Content-Type":"application/json","X-October-Request-Handler":"onMonitorFrontFilesFailed","X-Requested-With":"XMLHttpRequest"},data:dataJson}).then(function(response){let res=JSON.parse(response);for(const k in res)showErrorNotification("Some resource files do not exist",res[k].src);resolve(response)}).catch(function(error){reject(error)})})}function xhrRequestError(options){return new Promise(function(resolve,reject){var xhr=new XMLHttpRequest,header;if(xhr.open(options.method,options.url,!0),xhr.onload=function(){xhr.status>=200&&xhr.status<300?resolve(xhr.responseText):reject(xhr.statusText)},xhr.onerror=function(){reject(xhr.statusText)},options.headers)for(header in options.headers)xhr.setRequestHeader(header,options.headers[header]);options.data?xhr.send(JSON.stringify(options.data)):xhr.send()})}function holderFile(url=""){let isHolderArray=["dist/","assets/","files/"],isDomain=verifyAddressIsDomain({src:url});return isHolderArray.some(item=>url.includes(item))&&isDomain}function getCookieValError(name){var prefix=name+"=",end,value,start=document.cookie.indexOf(prefix);return start==-1?"":(end=document.cookie.indexOf(";",start+prefix.length),end==-1&&(end=document.cookie.length),value=document.cookie.substring(start+prefix.length,end),unescape(value))}function verifyAddressIsDomain(obj){if(obj?.src){let src=obj.src.toString(),origin=location.origin;return src.indexOf(origin)>=0}}function stringToLower(str){if(str)return str.toString().toLowerCase()}}catch(e){console.error(e)}外套類|女性時尚 - vivi-look 台灣|流行時尚女裝 已加入購物車 會員登入收藏購物車所有商品新品上市人氣熱銷限時折扣特別企劃加一元 多一件上衣類T恤襯衫衛衣針織/毛衣細肩帶/背心風格支線清新學院風韓版優雅風可愛漫畫風百變休閒風洋裝類長洋裝短洋裝印花洋裝牛仔洋裝蕾絲洋裝針織洋裝吊帶褲套裝下著類寬褲長褲牛仔褲裙類內搭褲短褲外套類休閒夾克西裝外套罩衫風衣外套羽絨外套鞋子休閒鞋平底鞋高跟鞋靴子涼鞋內衣泳衣情趣內衣bra內衣內褲居家服/睡衣配件飾品包包墨鏡冰袖皮帶雨具/雨衣襪子圍巾/手套帽/披肩後跟貼 外套類最新上架價格由低到高價格由高到低最高人氣簡約蕾絲鏤空超仙防曬防紫外線連帽罩衫外套NT$853 (96)韓版慵懶寬鬆薄款長袖防曬空調開衫針織罩衫NT$459 (34)【6色】韓版時尚簡約百搭短款短袖西裝外套NT$738 (6)夏日外搭薄版開襟外套百搭短版防曬衣披肩優雅風針織防曬罩衫上衣NT$554 (6)寬鬆百搭設計感連帽防曬外套休閒夾克NT$929 (8)輕薄透氣設計感洋氣寬鬆休閒防曬襯衫上衣NT$1,210 (10)簡約好搭薄款網紗外搭短款防曬罩衫NT$405 (198)日係輕薄連帽防曬衣服夏季防紫外線遮陽防曬衫NT$1,041 (31)夏季高級感外搭冰絲針織開襟衫披肩防曬空調罩衫NT$806 (12)夏季必備白色長款襯衫波點設計POLO領長袖防曬襯衫NT$788 (99)氣質微奢時尚高級感蕾絲七分袖薄款防曬西裝外套NT$729 (9)韓國慵懶風鏤空蕾絲防曬開衫外搭冷氣罩衫披肩襯衫NT$782 (11)寬鬆連帽防紫外線防曬透氣外套休閒夾克NT$968 (10)蕾絲雙面外套重工鉤花棒球短版外套防曬外套NT$1,437 (24)出遊必備時尚百搭薄款格紋防曬雪紡襯衫休閒夾克NT$898 (4)清新韓系輕薄透氣顯瘦V領針織防曬罩衫NT$783 (31)寬鬆慵懶風時尚百搭透氣輕薄防曬襯衫罩衫NT$952 (7)夏季韓國chic寬鬆休閒簡約防曬外套NT$1,116 (3)韓版時尚休閒拼接薄款拉鍊寬鬆設計感連帽防曬衣外套NT$958 (7)寬鬆慵懶日系復古蝙蝠袖針織毛衣外套開衫NT$720 (5)出遊必備經典時尚冰絲防曬透氣拉鏈休閒夾克NT$702 (31)夢幻炫彩涼感空調遮陽寬鬆透氣薄款連帽抽繩防曬外套休閒夾克NT$1,383 (29)冰絲針織連帽拉鍊寬鬆涼感防曬罩衫NT$1,554 (114)百搭時髦春秋韓版鏤空防曬寬鬆時尚慵懶風外套針織開衫NT$698 (11)簡約百搭寬鬆蝙蝠袖鏤空針織披肩開衫NT$675 (5)簡約質感慵懶風寬鬆薄款冰絲長袖防曬罩衫NT$702 (107)夏季冰絲V領七分袖針織開襟衫短款寬鬆薄外搭配裙子披肩空調防曬衫.NT$767 (3)韓版寬鬆顯瘦防曬沙灘七分袖小清新披肩罩衫NT$729 (28)韓版百搭休閒素面短款西裝外套NT$1,295 (103)超柔親膚百搭輕薄素面長袖人氣罩衫NT$612 (95)溫柔好感寬鬆鏤空空調衫防曬針織開衫NT$742 (121)新品小香風復古顯瘦潮女寬鬆連帽千鳥格毛呢外套NT$789 NT$1,127新品上市小香風羊羔毛加厚拼接外套NT$900新品溫柔高級感寬鬆慵懶顯瘦斗篷氣質大衣小個子短毛呢子外套NT$898 NT$1,283新品上市【全3色】氣質優雅百搭針織披肩NT$756新品上市【全5色】日系簡約雙頭拉鏈圓領外套NT$1,133新品上市【全3色】海軍領百搭收腰顯瘦棉服NT$945新品上市韓版寬鬆加厚羊羔毛外套NT$810«12...789101112131415»
已加入購物車
外套類
簡約蕾絲鏤空超仙防曬防紫外線連帽罩衫外套
NT$853
(96)
韓版慵懶寬鬆薄款長袖防曬空調開衫針織罩衫
NT$459
(34)
【6色】韓版時尚簡約百搭短款短袖西裝外套
NT$738
(6)
夏日外搭薄版開襟外套百搭短版防曬衣披肩優雅風針織防曬罩衫上衣
NT$554
寬鬆百搭設計感連帽防曬外套休閒夾克
NT$929
(8)
輕薄透氣設計感洋氣寬鬆休閒防曬襯衫上衣
NT$1,210
(10)
簡約好搭薄款網紗外搭短款防曬罩衫
NT$405
(198)
日係輕薄連帽防曬衣服夏季防紫外線遮陽防曬衫
NT$1,041
(31)
夏季高級感外搭冰絲針織開襟衫披肩防曬空調罩衫
NT$806
(12)
夏季必備白色長款襯衫波點設計POLO領長袖防曬襯衫
NT$788
(99)
氣質微奢時尚高級感蕾絲七分袖薄款防曬西裝外套
NT$729
(9)
韓國慵懶風鏤空蕾絲防曬開衫外搭冷氣罩衫披肩襯衫
NT$782
(11)
寬鬆連帽防紫外線防曬透氣外套休閒夾克
NT$968
蕾絲雙面外套重工鉤花棒球短版外套防曬外套
NT$1,437
(24)
出遊必備時尚百搭薄款格紋防曬雪紡襯衫休閒夾克
NT$898
(4)
清新韓系輕薄透氣顯瘦V領針織防曬罩衫
NT$783
寬鬆慵懶風時尚百搭透氣輕薄防曬襯衫罩衫
NT$952
(7)
夏季韓國chic寬鬆休閒簡約防曬外套
NT$1,116
(3)
韓版時尚休閒拼接薄款拉鍊寬鬆設計感連帽防曬衣外套
NT$958
寬鬆慵懶日系復古蝙蝠袖針織毛衣外套開衫
NT$720
(5)
出遊必備經典時尚冰絲防曬透氣拉鏈休閒夾克
NT$702
夢幻炫彩涼感空調遮陽寬鬆透氣薄款連帽抽繩防曬外套休閒夾克
NT$1,383
(29)
冰絲針織連帽拉鍊寬鬆涼感防曬罩衫
NT$1,554
(114)
百搭時髦春秋韓版鏤空防曬寬鬆時尚慵懶風外套針織開衫
NT$698
簡約百搭寬鬆蝙蝠袖鏤空針織披肩開衫
NT$675
簡約質感慵懶風寬鬆薄款冰絲長袖防曬罩衫
(107)
夏季冰絲V領七分袖針織開襟衫短款寬鬆薄外搭配裙子披肩空調防曬衫.
NT$767
韓版寬鬆顯瘦防曬沙灘七分袖小清新披肩罩衫
(28)
韓版百搭休閒素面短款西裝外套
NT$1,295
(103)
超柔親膚百搭輕薄素面長袖人氣罩衫
NT$612
(95)
溫柔好感寬鬆鏤空空調衫防曬針織開衫
NT$742
(121)
小香風復古顯瘦潮女寬鬆連帽千鳥格毛呢外套
NT$789 NT$1,127
小香風羊羔毛加厚拼接外套
NT$900
溫柔高級感寬鬆慵懶顯瘦斗篷氣質大衣小個子短毛呢子外套
NT$898 NT$1,283
【全3色】氣質優雅百搭針織披肩
NT$756
【全5色】日系簡約雙頭拉鏈圓領外套
NT$1,133
【全3色】海軍領百搭收腰顯瘦棉服
NT$945
韓版寬鬆加厚羊羔毛外套
NT$810