Skip to content

Commit c2e53a3

Browse files
committed
MV3
1 parent d4ee69f commit c2e53a3

20 files changed

+637
-8706
lines changed

hello-world/manifest.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"manifest_version": 2,
2+
"manifest_version": 3,
33
"name": "Hello World",
44
"version": "1.0.0",
55
"description": "Welcome to chrome extension world",
@@ -9,7 +9,7 @@
99
"48": "icon48.png",
1010
"128": "icon128.png"
1111
},
12-
"browser_action": {
12+
"action": {
1313
"default_icon": {
1414
"16": "icon16.png",
1515
"32": "icon32.png"

merge-windows/background.js

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
let targetWindow = null; //当前激活的浏览器窗口
22
let tabCount = 0; //当前激活浏览器窗口里的tab的数量
3-
43
/**
54
* 点击浏览器图标绑定的事件
65
* @param tab
@@ -10,7 +9,8 @@ function start(tab) {
109
}
1110
function getWindows(win) {
1211
targetWindow = win;
13-
chrome.tabs.getAllInWindow(targetWindow.id, getTabs);
12+
// 获取某个window下的所有tab
13+
chrome.tabs.query({windowId: targetWindow.id}, getTabs);
1414
}
1515
function getTabs(tabs) {
1616
tabCount = tabs.length;
@@ -23,15 +23,14 @@ function moveTabs(windows) {
2323
var win = windows[i];
2424
if (targetWindow.id != win.id) {
2525
var numTabs = win.tabs.length;
26-
for (var j = 0; j < numWindows; j++) {
26+
for (var j = 0; j < numTabs; j++) {
2727
var tab = win.tabs[j];
2828
chrome.tabs.move(tab.id, {"windowId":targetWindow.id, "index": tabPosition});
2929
tabPosition++;
3030
}
3131
}
32-
3332
}
34-
3533
}
34+
3635
// 地址栏图标绑定点击事件
37-
chrome.browserAction.onClicked.addListener(start);
36+
chrome.action.onClicked.addListener(start);

merge-windows/manifest.json

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
{
22
"name": "浏览器窗口合并",
3-
"manifest_version": 2,
3+
"manifest_version": 3,
44
"version": "1.0.0",
55
"description": "合并其它的浏览器窗口到当前的窗口",
66
"icons": {
77
"48": "img/icon_48.png",
88
"128": "img/icon_128.png"
99
},
1010
"background": {
11-
"persistent": false,
12-
"scripts": ["background.js"]
11+
"service_worker": "background.js"
1312
},
14-
"browser_action": {
13+
"action": {
1514
"default_icon": "img/unit.png",
1615
"default_title": "窗口合并"
1716
}

notifications/background.js

+38-24
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,50 @@
1+
const LS = chrome.storage.local
2+
13
function show() {
24
var time = /(..)(:..)/.exec(new Date()); // 当前时间.
35
var hour = time[1] % 12 || 12; // 小时
46
var period = time[1] < 12 ? 'a.m.' : 'p.m.'; // 上午、下午
5-
new Notification(hour + time[2] + ' ' + period, {
6-
icon: '48.png',
7-
body: '是时候起来溜达一下了~~'
7+
chrome.notifications.create({
8+
type: 'basic',
9+
iconUrl: 'img/icon_48.png',
10+
title: '是时候起来溜达一下了~~',
11+
message: hour + time[2] + ' ' + period,
12+
priority: 0
813
});
914
}
1015

1116
// 判断是否已经初始化
12-
if (!localStorage.isInitialized) {
13-
localStorage.isActivated = true; // 是否激活
14-
localStorage.frequency = 1; // 显示间隔,分钟
15-
localStorage.isInitialized = true; // 初始化状态
16-
}
17+
async function init() {
18+
let isInitializedInitObj = await LS.get(['isInitialized'])
19+
if (!isInitializedInitObj.isInitializedInit) {
20+
LS.set({"isActivated": true}) // 是否激活
21+
LS.set({"frequency": 1}) // 显示间隔,分钟
22+
LS.set({"isInitialized": true}) // 初始化状态
23+
}
24+
// 浏览器是否支持通知
25+
var window = window ?? self;
26+
if (window.Notification) {
27+
// 加载时就先显示一下
28+
let tmp = await LS.get(['isActivated'])
29+
if (tmp.isActivated) { show(); }
1730

18-
// 浏览器是否支持通知
19-
if (window.Notification) {
20-
// 加载时就先显示一下
21-
if (JSON.parse(localStorage.isActivated)) { show(); }
31+
var interval = 0; // 间隔分钟数
2232

23-
var interval = 0; // 间隔分钟数
33+
setInterval(async () => {
34+
interval++;
35+
let isActivatedObj = await LS.get(['isActivated'])
36+
let frequencyObj = await LS.get(['frequency'])
37+
if (
38+
isActivatedObj.isActivated &&
39+
(frequencyObj.frequency <= interval)
40+
) {
41+
show();
42+
interval = 0;
43+
}
44+
}, 60000);
45+
}
46+
}
47+
48+
init()
2449

25-
setInterval(function() {
26-
interval++;
2750

28-
if (
29-
JSON.parse(localStorage.isActivated) &&
30-
localStorage.frequency <= interval
31-
) {
32-
show();
33-
interval = 0;
34-
}
35-
}, 60000);
36-
}

notifications/manifest.json

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
{
22
"name": "消息通知",
3-
"manifest_version": 2,
3+
"manifest_version": 3,
44
"version": "1.0.0",
55
"description":
66
"定时显示消息通知",
77
"icons": {"16": "img/icon_16.png", "48": "img/icon_48.png", "128": "img/icon_128.png"},
88
"permissions": [
9-
"notifications"
9+
"notifications",
10+
"storage"
1011
],
1112
"options_page": "options.html",
12-
"background": { "scripts": ["background.js"] },
13-
"web_accessible_resources": [
14-
"img/icon_48.png"
15-
]
13+
"background": {
14+
"service_worker": "background.js"
15+
}
1616
}

notifications/options.js

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,31 @@
1+
const LS = chrome.storage.local
12
function trigger(isDeactivated) {
23
// 设定颜色
34
document.getElementById("options").style.color = isDeactivated ? 'graytext' : 'black';
45
// 设定可用状态
56
document.getElementById("options").frequency.disabled = isDeactivated;
67
}
78
// 页面加载方法
8-
window.addEventListener('load', function() {
9+
window.addEventListener('load', async function() {
910
// 获取页面对象
1011
const obj = document.getElementById("options");
1112
// 显示存储的值
12-
obj.isActivated.checked = localStorage.isActivated ? JSON.parse(localStorage.isActivated) : true;
13+
let isActivatedObj = await LS.get(['isActivated'])
14+
obj.isActivated.checked = isActivatedObj.isActivated || true;
1315
// 显示存储的值
14-
obj.frequency.value = localStorage.frequency;
16+
let frequencyObj = await LS.get(['frequency'])
17+
obj.frequency.value = frequencyObj.frequency;
1518

1619
// 根据存储值来设定页面上的勾选状态
1720
if (!obj.isActivated.checked) { trigger(true); }
1821

1922
// 绑定勾选的变化事件
2023
obj.isActivated.onchange = function() {
21-
localStorage.isActivated = obj.isActivated.checked; // 设定本地存储
24+
LS.set({"isActivated": obj.isActivated.checked}); // 设定本地存储
2225
trigger(!obj.isActivated.checked);
2326
};
2427
// 绑定间隔的变化事件
2528
obj.frequency.onchange = function() {
26-
localStorage.frequency = obj.frequency.value; // 设定本地存储
29+
LS.set({"frequency": obj.frequency.value}); // 设定本地存储
2730
};
2831
});

screen-capture/manifest.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
{
22
"name": "一键生成网页截图",
33
"version": "1.0.0",
4-
"manifest_version": 2,
4+
"manifest_version": 3,
55
"description": "将当前浏览的网页一键保存为图片",
6-
"browser_action": {
6+
"action": {
77
"default_icon": "img/icon.png",
88
"default_popup": "popup.html"
99
},
10-
"permissions": [ "activeTab", "storage", "unlimitedStorage" ],
10+
"permissions": [ "tabs", "activeTab", "scripting", "storage", "unlimitedStorage" ],
1111
"icons": {
1212
"16": "img/icon16.png",
1313
"48": "img/icon48.png",

0 commit comments

Comments
 (0)