Skip to content

Firefox 兼容性修复及功能改进 #97

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions extension/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
/node_modules
/.pnp
.pnp.js
node_modules/

# testing
/coverage
Expand Down
25 changes: 18 additions & 7 deletions extension/background/messages/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,23 @@ export type ResponseBody = {

export const handler: PlasmoMessaging.MessageHandler<RequestBody,
ResponseBody> = async (req, res) => {
// 获得cookie,并进行过滤
const payload = req.body.payload;
const result = (payload['type'] && payload['type'] == 'down') ? await download_cookie(payload) : await upload_cookie(payload);
res.send({
message: result['action'],
note: result['note'],
})
try {
// 获得cookie,并进行过滤
const payload = req.body.payload;
const result = (payload['type'] && payload['type'] == 'down') ? await download_cookie(payload) : await upload_cookie(payload);

// 确保在函数结束前完成响应发送
res.send({
message: result && result['action'] ? result['action'] : 'error',
note: result && result['note'] ? result['note'] : null,
});
} catch (error) {
console.error("处理消息时出错:", error);
// 确保即使出错也能发送响应
res.send({
message: 'error',
note: `操作失败: ${error.message}`,
});
}
}

Binary file added extension/cookiecloud-firefox.xpi
Binary file not shown.
127 changes: 87 additions & 40 deletions extension/function.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,33 +35,45 @@ export async function browser_remove( key )

export async function storage_set( key, value )
{
return new Promise((resolve, reject) => {
chrome.storage.local.set( {[key]:value}, function () {
return resolve(true);
});
});
if (is_firefox()) {
return await browser_set(key, value);
} else {
return new Promise((resolve, reject) => {
chrome.storage.local.set( {[key]:value}, function () {
return resolve(true);
});
});
}
}

export async function storage_get( key )
{
return new Promise((resolve, reject) => {
chrome.storage.local.get([key], function (result) {
if (result[key] === undefined) {
resolve(null);
} else {
resolve(result[key]);
}
});
});
if (is_firefox()) {
return await browser_get(key);
} else {
return new Promise((resolve, reject) => {
chrome.storage.local.get([key], function (result) {
if (result[key] === undefined) {
resolve(null);
} else {
resolve(result[key]);
}
});
});
}
}

export async function storage_remove( key )
{
return new Promise((resolve, reject) => {
chrome.storage.local.remove([key], function (result) {
resolve(result);
});
});
if (is_firefox()) {
return await browser_remove(key);
} else {
return new Promise((resolve, reject) => {
chrome.storage.local.remove([key], function (result) {
resolve(result);
});
});
}
}

export async function browser_load_all(prefix=null)
Expand Down Expand Up @@ -89,25 +101,29 @@ export async function browser_load_all(prefix=null)

export async function load_all(prefix=null)
{
return new Promise((resolve, reject) => {
chrome.storage.local.get(null, function (result) {
let ret = result;
// 只返回以prefix开头的key对应的属性
if( prefix )
{
ret = {};
for( let key in result )
if (is_firefox()) {
return await browser_load_all(prefix);
} else {
return new Promise((resolve, reject) => {
chrome.storage.local.get(null, function (result) {
let ret = result;
// 只返回以prefix开头的key对应的属性
if( prefix )
{
if( key.startsWith(prefix) )
ret = {};
for( let key in result )
{
// remove prefix from key
ret[key.substring(prefix.length)] = JSON.parse(result[key])??result[key];
if( key.startsWith(prefix) )
{
// remove prefix from key
ret[key.substring(prefix.length)] = JSON.parse(result[key])??result[key];
}
}
}
}
resolve(ret);
});
});
resolve(ret);
});
});
}
}

export async function load_data( key )
Expand Down Expand Up @@ -303,7 +319,7 @@ export async function download_cookie(payload)

function cookie_decrypt( uuid, encrypted, password )
{
const CryptoJS = require('crypto-js');
// 使用已导入的CryptoJS,而不是require
const the_key = CryptoJS.MD5(uuid+'-'+password).toString().substring(0,16);
const decrypted = CryptoJS.AES.decrypt(encrypted, the_key).toString(CryptoJS.enc.Utf8);
const parsed = JSON.parse(decrypted);
Expand Down Expand Up @@ -406,9 +422,40 @@ export function sleep(ms) {
}

export function showBadge(text, color = "red", delay = 5000) {
chrome.action.setBadgeText({text:text});
chrome.action.setBadgeBackgroundColor({color:color});
setTimeout(() => {
chrome.action.setBadgeText({ text: '' });
}, delay);
try {
if (is_firefox()) {
// Firefox MV2 使用 browserAction API
if (browser.browserAction) {
browser.browserAction.setBadgeText({text:text});
browser.browserAction.setBadgeBackgroundColor({color:color});
setTimeout(() => {
browser.browserAction.setBadgeText({ text: '' });
}, delay);
} else if (browser.action) {
// Firefox MV3 使用 action API
browser.action.setBadgeText({text:text});
browser.action.setBadgeBackgroundColor({color:color});
setTimeout(() => {
browser.action.setBadgeText({ text: '' });
}, delay);
}
} else {
// Chrome 使用 action API (MV3) 或 browserAction API (MV2)
if (chrome.action) {
chrome.action.setBadgeText({text:text});
chrome.action.setBadgeBackgroundColor({color:color});
setTimeout(() => {
chrome.action.setBadgeText({ text: '' });
}, delay);
} else if (chrome.browserAction) {
chrome.browserAction.setBadgeText({text:text});
chrome.browserAction.setBadgeBackgroundColor({color:color});
setTimeout(() => {
chrome.browserAction.setBadgeText({ text: '' });
}, delay);
}
}
} catch (error) {
console.error("设置徽章出错:", error);
}
}
Loading