-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathbackground.js
More file actions
93 lines (78 loc) · 2.87 KB
/
background.js
File metadata and controls
93 lines (78 loc) · 2.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
// Cache settings để tối ưu hiệu suất
let enableCtrlC = true;
let enablePersistent = true;
// Load settings ban đầu
chrome.storage.local.get(['enableCtrlC', 'enablePersistent']).then(res => {
enableCtrlC = res.enableCtrlC !== false;
enablePersistent = res.enablePersistent !== false;
});
// Lắng nghe thay đổi settings
chrome.storage.onChanged.addListener((changes, area) => {
if (area === 'local') {
if ('enableCtrlC' in changes) {
enableCtrlC = changes.enableCtrlC.newValue !== false;
}
if ('enablePersistent' in changes) {
enablePersistent = changes.enablePersistent.newValue !== false;
}
}
});
// Khởi tạo context menu khi extension được cài đặt
chrome.runtime.onInstalled.addListener(() => {
chrome.contextMenus.create({
id: "saveToClipboard",
title: "Lưu vào Clipboard",
contexts: ["selection"]
});
});
// Xử lý khi user click vào context menu
chrome.contextMenus.onClicked.addListener((info, tab) => {
if (info.menuItemId === "saveToClipboard" && info.selectionText) {
saveTextToPersistent(info.selectionText);
}
});
// Lưu text vào storage vĩnh viễn (context menu luôn hoạt động)
async function saveTextToPersistent(text) {
try {
const result = await chrome.storage.local.get(['clipboard_persistent']);
const persistentTexts = result.clipboard_persistent || [];
// Loại bỏ text cũ nếu đã tồn tại (tránh duplicate)
const filteredTexts = persistentTexts.filter(item => item !== text);
// Thêm text mới vào đầu danh sách (mới nhất ở trên)
filteredTexts.unshift(text);
await chrome.storage.local.set({ clipboard_persistent: filteredTexts });
} catch (error) {
console.error('Lỗi khi lưu text persistent:', error);
}
}
// Lưu text vào storage tạm thời
async function saveTextToTemp(text) {
try {
const result = await chrome.storage.session.get(['clipboard_temp']);
const tempTexts = result.clipboard_temp || [];
// Loại bỏ text cũ nếu đã tồn tại
const filteredTexts = tempTexts.filter(item => item !== text);
// Thêm text mới vào đầu danh sách (mới nhất ở trên)
filteredTexts.unshift(text);
await chrome.storage.session.set({ clipboard_temp: filteredTexts });
} catch (error) {
console.error('Lỗi khi lưu text temp:', error);
}
}
// Lắng nghe message từ content script
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.action === "saveTempText") {
// Kiểm tra cache thay vì await
if (!enableCtrlC) {
sendResponse({ success: false });
return;
}
// Quyết định lưu vào đâu dựa trên cache
if (enablePersistent) {
saveTextToPersistent(request.text);
} else {
saveTextToTemp(request.text);
}
sendResponse({ success: true });
}
});