-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpopup.js
158 lines (136 loc) · 4.81 KB
/
popup.js
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/**
* 评论快填 - 弹出窗口逻辑
*
* @author 時光
* @github https://github.com/shiguang-coding
* @blog https://blog.shiguangdev.cn
*/
document.addEventListener('DOMContentLoaded', function() {
const DEFAULT_VALUES = {
nickname: '時光',
email: '[email protected]',
website: ''
};
// 邮箱格式验证
function isValidEmail(email) {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(email);
}
// 加载保存的设置
chrome.storage.sync.get(['nickname', 'email', 'website'], function(data) {
document.getElementById('nickname').value = data.nickname || '';
document.getElementById('email').value = data.email || '';
document.getElementById('website').value = data.website || '';
});
// 保存设置
document.getElementById('save').addEventListener('click', function() {
let settings = {
nickname: document.getElementById('nickname').value.trim(),
email: document.getElementById('email').value.trim(),
website: document.getElementById('website').value.trim()
};
// 邮箱格式验证
if (settings.email && !isValidEmail(settings.email)) {
alert('请输入有效的邮箱地址');
return;
}
// 检查并设置默认值
if (!settings.nickname) {
alert(`昵称未填写,将使用默认昵称:${DEFAULT_VALUES.nickname}`);
settings.nickname = DEFAULT_VALUES.nickname;
document.getElementById('nickname').value = settings.nickname;
}
if (!settings.email) {
alert(`邮箱未填写,将使用默认邮箱:${DEFAULT_VALUES.email}`);
settings.email = DEFAULT_VALUES.email;
document.getElementById('email').value = settings.email;
}
chrome.storage.sync.set(settings, function() {
const saveBtn = document.getElementById('save');
saveBtn.textContent = '已保存!';
saveBtn.style.background = '#45a049';
setTimeout(() => {
saveBtn.textContent = '保存设置';
saveBtn.style.background = '#4CAF50';
}, 2000);
});
});
// 立即填充
document.getElementById('fill').addEventListener('click', async function() {
const fillBtn = document.getElementById('fill');
fillBtn.textContent = '填充中...';
fillBtn.disabled = true;
try {
const tabs = await chrome.tabs.query({active: true, currentWindow: true});
const tab = tabs[0];
if (!tab?.id || !tab.url?.startsWith('http')) {
throw new Error('无效的标签页或URL');
}
// 获取存储的值,如果昵称或邮箱为空则使用��认值
const data = await new Promise(resolve => {
chrome.storage.sync.get(['nickname', 'email', 'website'], resolve);
});
const fillData = {
nickname: data.nickname || DEFAULT_VALUES.nickname,
email: data.email || DEFAULT_VALUES.email,
website: data.website || DEFAULT_VALUES.website
};
await new Promise(resolve => {
chrome.storage.sync.set(fillData, resolve);
});
// 检查脚本是否已注入
try {
const [{ result }] = await chrome.scripting.executeScript({
target: { tabId: tab.id },
func: () => window.__COMMENT_AUTOFILL_INJECTED__
});
if (!result) {
await chrome.scripting.executeScript({
target: { tabId: tab.id },
func: () => {
window.__COMMENT_AUTOFILL_INJECTED__ = true;
}
});
await chrome.scripting.executeScript({
target: { tabId: tab.id },
files: ['content.js']
});
}
} catch (error) {
// 如果检查失败,尝试注入脚本
await chrome.scripting.executeScript({
target: { tabId: tab.id },
func: () => {
window.__COMMENT_AUTOFILL_INJECTED__ = true;
}
});
await chrome.scripting.executeScript({
target: { tabId: tab.id },
files: ['content.js']
});
}
// 等待一下确保脚本加载
await new Promise(resolve => setTimeout(resolve, 100));
// 发送填充消息
const response = await new Promise((resolve, reject) => {
chrome.tabs.sendMessage(tab.id, {action: 'fill'}, response => {
if (chrome.runtime.lastError) {
reject(chrome.runtime.lastError);
} else {
resolve(response);
}
});
});
fillBtn.textContent = response?.status === 'success' ? '填充完成' : '立即填充';
setTimeout(() => {
fillBtn.textContent = '立即填充';
}, 1000);
} catch (error) {
console.error('填充失败:', error);
alert('填充失败,请刷新页面后重试');
fillBtn.textContent = '立即填充';
} finally {
fillBtn.disabled = false;
}
});
});