電商 谷歌外掛 下載後臺的訂單資料
阿新 • • 發佈:2020-10-29
//原文:https://github.com/smileyby/js-table-excel //原文:https://github.com/sxei/chrome-plugin-demo var tableToExcel = (function () { var uri = 'data:application/vnd.ms-excel;base64,', template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">' + '<head><meta http-equiv="Content-type" content="text/html;charset=UTF-8" /><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/>' + '</x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body>{table}</body></html>', base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) }, format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }) }; return function (table_html, name) { var ctx = { worksheet: name || 'Worksheet', table: table_html } return uri + base64(format(template, ctx)); } })(); Date.prototype.Format = function (fmt) { var o = { "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 "H+": this.getHours(), //小時 "m+": this.getMinutes(), //分 "s+": this.getSeconds(), //秒 "q+": Math.floor((this.getMonth() + 3) / 3), //季度 "S": this.getMilliseconds() //毫秒 }; if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); for (var k in o) if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); return fmt; } var msieversion = function () { var ua = window.navigator.userAgent; var msie = ua.indexOf("MSIE "); if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // If Internet Explorer, return version number { return true; } else { // If another browser, return false; } return false; }; var JSONToCSVConvertor = function (JSONData, ShowLabel) { var arrData = typeof JSONData !== 'object' ? JSON.parse(JSONData) : JSONData; var CSV = ''; if (ShowLabel) { var row = ""; for (var index in arrData[0]) { row += index + ','; } row = row.slice(0, -1); CSV += row + '\r\n'; } for (var i = 0; i < arrData.length; i++) { var row = ""; for (var index in arrData[i]) { var arrValue = arrData[i][index] == null ? "" : '="' + arrData[i][index] + '"'; row += arrValue + ','; } row.slice(0, row.length - 1); CSV += row + '\r\n'; } if (CSV == '') { growl.error("Invalid data"); return; } var fileName = "Result"; if (msieversion()) { var IEwindow = window.open(); IEwindow.document.write('sep=,\r\n' + CSV); IEwindow.document.close(); IEwindow.document.execCommand('SaveAs', true, fileName + ".csv"); IEwindow.close(); } else { //var uri = 'data:application/csv;charset=utf-8,' + escape(CSV); var uri = 'data:application/csv;charset=utf-8,' + CSV; var link = document.createElement("a"); link.href = uri; link.style = "visibility:hidden"; link.download = fileName + ".csv"; document.body.appendChild(link); link.click(); document.body.removeChild(link); } }; var arr = []; var add = function(){ $("div.trade-order-main").each(function () { var orderInfo = { orderNum: '', createTime: '', title: '', nickName: '', realPrice: '', }; // order info var spans = $($(this).children("table")[0]).find("tbody label span"); orderInfo.orderNum = $(spans[2]).text(); orderInfo.createTime = $(spans[5]).text(); // goods info var spans = $($(this).children("table")[1]).find("tbody tr").each(function () { var index = $(this).index(); if (index == 0) { var tds = $(this).find("td");; orderInfo.title = $($(tds[0]).find("p span")[1]).text(); orderInfo.nickName = $($(tds[4]).find("a")[0]).text(); orderInfo.realPrice = $($(tds[6]).find("span")[1]).text(); } else {// one order, multiple goods var tds = $(this).find("td");; orderInfo.title = orderInfo.title + "," + $($(tds[0]).find("p span")[1]).text(); } }); // console //console.log(orderInfo); arr.push(orderInfo); }); console.log(arr); }; // 接收來自後臺的訊息 chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) { console.log('收到來自 ' + (sender.tab ? "content-script(" + sender.tab.url + ")" : "popup或者background") + ' 的訊息:', request); if (request.cmd == 'update_font_size') { var id = setInterval(function () { console.log('準備儲存資料'); add(); console.log('資料儲存完成'); if ($("#sold_container li.pagination-disabled.pagination-next").length > 0) { console.log('沒有下一頁了'); window.clearInterval(id) JSONToCSVConvertor(arr.reverse(), true); return; } $("li.pagination-next").get(0).click();//下一頁 }, 2000); } else { tip(JSON.stringify(request)); sendResponse('我收到你的訊息了:' + JSON.stringify(request)); } });