2023-08-06 16:50:17 +08:00
|
|
|
/**
|
2023-08-14 18:25:19 +08:00
|
|
|
利用chrome的fetch来避免跨域
|
|
|
|
|
**/
|
2023-08-06 16:50:17 +08:00
|
|
|
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
|
|
|
|
|
if (request.type == 'api') {
|
2023-08-15 17:09:00 +08:00
|
|
|
new Promise((resolve) => {
|
2023-08-06 16:50:17 +08:00
|
|
|
let headers = {};
|
|
|
|
|
if (request.needMallId) {
|
|
|
|
|
headers.Mallid = request.mallId;
|
|
|
|
|
}
|
2023-08-15 17:09:00 +08:00
|
|
|
if (request.anti) {
|
2023-08-17 02:41:13 +08:00
|
|
|
headers["Anti-Content"] = request.anti
|
2023-08-15 17:09:00 +08:00
|
|
|
}
|
2023-08-06 16:50:17 +08:00
|
|
|
headers['Content-Type'] = 'application/json';
|
|
|
|
|
headers.cookie = getCookie();
|
2023-08-14 18:25:19 +08:00
|
|
|
Promise.resolve().then(() => fetch(request.url, {
|
2023-08-06 16:50:17 +08:00
|
|
|
'headers': headers,
|
|
|
|
|
'method': 'POST',
|
|
|
|
|
'referrerPolicy': 'no-referrer',
|
|
|
|
|
'credentials': 'include',
|
|
|
|
|
'body': JSON.stringify(request.data),
|
|
|
|
|
'mode': 'cors'
|
2023-08-14 18:25:19 +08:00
|
|
|
})).then((res) => {
|
2023-08-06 16:50:17 +08:00
|
|
|
resolve(res.json());
|
|
|
|
|
});
|
2023-08-15 17:09:00 +08:00
|
|
|
}).then(sendResponse);
|
2023-10-12 13:16:12 +08:00
|
|
|
} else if (request.type == 'temuApi') {
|
|
|
|
|
new Promise((resolve) => {
|
|
|
|
|
let headers = {};
|
|
|
|
|
if (request.anti) {
|
|
|
|
|
headers["Anti-Content"] = request.anti
|
|
|
|
|
}
|
|
|
|
|
headers['Content-Type'] = 'application/json';
|
|
|
|
|
headers.cookie = getTemuCookie();
|
|
|
|
|
Promise.resolve().then(() => fetch(request.url, {
|
|
|
|
|
'headers': headers,
|
|
|
|
|
'method': 'POST',
|
|
|
|
|
'referrerPolicy': 'no-referrer',
|
|
|
|
|
'credentials': 'include',
|
|
|
|
|
'body': JSON.stringify(request.data),
|
|
|
|
|
'mode': 'cors'
|
|
|
|
|
})).then((res) => {
|
|
|
|
|
resolve(res.json());
|
2023-11-24 01:04:54 +08:00
|
|
|
}).catch(() => {
|
|
|
|
|
resolve({success: false, errorCode: -1})
|
2023-10-12 13:16:12 +08:00
|
|
|
});
|
|
|
|
|
}).then(sendResponse);
|
2023-09-25 10:13:54 +08:00
|
|
|
} else if (request.type == 'temu') {
|
|
|
|
|
new Promise((resolve) => {
|
|
|
|
|
let headers = {};
|
|
|
|
|
headers['Content-Type'] = 'text/html';
|
|
|
|
|
headers.cookie = getTemuCookie();
|
|
|
|
|
Promise.resolve().then(() => fetch(request.url, {
|
|
|
|
|
'headers': headers,
|
|
|
|
|
'method': 'GET',
|
|
|
|
|
'referrerPolicy': 'no-referrer',
|
|
|
|
|
'credentials': 'include',
|
|
|
|
|
'mode': 'cors'
|
|
|
|
|
})).then((res) => {
|
|
|
|
|
// 创建了一个数据读取器
|
|
|
|
|
const reader = res.body.getReader();
|
|
|
|
|
// 创建了一个文本解码器
|
|
|
|
|
const decoder = new TextDecoder();
|
|
|
|
|
|
|
|
|
|
let text = ""
|
|
|
|
|
reader.read().then(function processText({ done, value }) {
|
|
|
|
|
// Result 对象包含了两个属性:
|
|
|
|
|
// done - 当 stream 传完所有数据时则变成 true
|
|
|
|
|
// value - 数据片段。当 done 为 true 时始终为 undefined
|
|
|
|
|
if (done) {
|
|
|
|
|
resolve(text);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// 将字节流转换为字符
|
|
|
|
|
text = text + decoder.decode(value)
|
|
|
|
|
// 再次调用这个函数以读取更多数据
|
|
|
|
|
return reader.read().then(processText);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}).then(sendResponse);
|
|
|
|
|
} else if (request.type == 'aliexpress') {
|
|
|
|
|
new Promise((resolve) => {
|
|
|
|
|
let headers = {};
|
|
|
|
|
headers['Content-Type'] = 'text/html';
|
|
|
|
|
headers.cookie = getAliexpressCookie();
|
|
|
|
|
Promise.resolve().then(() => fetch(request.url, {
|
|
|
|
|
'headers': headers,
|
|
|
|
|
'method': 'GET',
|
|
|
|
|
'referrerPolicy': 'no-referrer',
|
|
|
|
|
'credentials': 'include',
|
|
|
|
|
'mode': 'cors'
|
|
|
|
|
})).then((res) => {
|
|
|
|
|
// 创建了一个数据读取器
|
|
|
|
|
const reader = res.body.getReader();
|
|
|
|
|
// 创建了一个文本解码器
|
|
|
|
|
const decoder = new TextDecoder();
|
|
|
|
|
|
|
|
|
|
let text = ""
|
|
|
|
|
reader.read().then(function processText({ done, value }) {
|
|
|
|
|
// Result 对象包含了两个属性:
|
|
|
|
|
// done - 当 stream 传完所有数据时则变成 true
|
|
|
|
|
// value - 数据片段。当 done 为 true 时始终为 undefined
|
|
|
|
|
if (done) {
|
|
|
|
|
resolve(text);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// 将字节流转换为字符
|
|
|
|
|
text = text + decoder.decode(value)
|
|
|
|
|
// 再次调用这个函数以读取更多数据
|
|
|
|
|
return reader.read().then(processText);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}).then(sendResponse);
|
2023-08-06 16:50:17 +08:00
|
|
|
} else if (request.type == 'notify') {
|
|
|
|
|
chrome.notifications.create(
|
2023-08-14 18:25:19 +08:00
|
|
|
"" + Math.random(), {
|
|
|
|
|
type: "basic",
|
|
|
|
|
title: "TEMU助手",
|
|
|
|
|
message: "您店铺【" + request.mallName + "】的商品【" + request.productName + "】成功加入发货台,请尽快处理",
|
|
|
|
|
iconUrl: "./icons/48.png"
|
|
|
|
|
}, null
|
2023-08-06 16:50:17 +08:00
|
|
|
)
|
|
|
|
|
}
|
2023-08-14 18:25:19 +08:00
|
|
|
|
2023-08-06 16:50:17 +08:00
|
|
|
return true;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
chrome.action.onClicked.addListener(function () {
|
|
|
|
|
chrome.tabs.create({
|
2023-08-14 18:25:19 +08:00
|
|
|
url: "./popup.html"
|
2023-08-06 16:50:17 +08:00
|
|
|
}, function (tab) {
|
2023-08-14 18:25:19 +08:00
|
|
|
console.log('tab is:' + tab);
|
2023-08-06 16:50:17 +08:00
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
2023-08-22 20:16:59 +08:00
|
|
|
chrome.webRequest.onSendHeaders.addListener(details => {
|
|
|
|
|
if (details.url && (details.url.indexOf('joinDeliveryGoodsOrderPlatform') != -1)) {
|
|
|
|
|
details.requestHeaders.push({
|
|
|
|
|
name: 'Referer',
|
|
|
|
|
value: 'https://kuajing.pinduoduo.com/main/order-manage'
|
|
|
|
|
})
|
|
|
|
|
for (let i = 0 ; i < details.requestHeaders.length; i++) {
|
|
|
|
|
if (details.requestHeaders[i].name == 'Origin') {
|
|
|
|
|
details.requestHeaders[i].value = 'https://kuajing.pinduoduo.com'
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-09-08 21:50:46 +08:00
|
|
|
} else if (details.url && (details.url.indexOf('mms/userInfo') != -1)) {
|
|
|
|
|
details.requestHeaders.push({
|
|
|
|
|
name: 'Referer',
|
|
|
|
|
value: 'https://kuajing.pinduoduo.com/main/order-manage'
|
|
|
|
|
})
|
|
|
|
|
for (let i = 0 ; i < details.requestHeaders.length; i++) {
|
|
|
|
|
if (details.requestHeaders[i].name == 'Origin') {
|
|
|
|
|
details.requestHeaders[i].value = 'https://kuajing.pinduoduo.com'
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-08-22 20:16:59 +08:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{urls: ["<all_urls>"]},["requestHeaders", "extraHeaders"]);
|
|
|
|
|
|
|
|
|
|
|
2023-08-06 16:50:17 +08:00
|
|
|
function getCookie() {
|
|
|
|
|
const url = new URL("https://kuajing.pinduoduo.com/");
|
|
|
|
|
let cStr = '';
|
|
|
|
|
chrome.cookies.getAll({domain: url.host}, (cookie) => {
|
|
|
|
|
cookie.map((c) => {
|
|
|
|
|
cStr += c.name + '=' + c.value + ';';
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
return cStr;
|
2023-08-14 18:25:19 +08:00
|
|
|
}
|
2023-09-25 10:13:54 +08:00
|
|
|
|
|
|
|
|
function getTemuCookie() {
|
|
|
|
|
const url = new URL("https://www.temu.com/");
|
|
|
|
|
let cStr = '';
|
|
|
|
|
chrome.cookies.getAll({domain: url.host}, (cookie) => {
|
|
|
|
|
cookie.map((c) => {
|
|
|
|
|
cStr += c.name + '=' + c.value + ';';
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
return cStr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getAliexpressCookie() {
|
|
|
|
|
const url = new URL("https://www.aliexpress.us/");
|
|
|
|
|
let cStr = '';
|
|
|
|
|
chrome.cookies.getAll({domain: url.host}, (cookie) => {
|
|
|
|
|
cookie.map((c) => {
|
|
|
|
|
cStr += c.name + '=' + c.value + ';';
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
return cStr;
|
|
|
|
|
}
|