我试图创建一个非常简单的chrome扩展,使我能够使用水平滚动浏览器来回导航。我希望能够启用和禁用扩展;然而,我希望当标签改变时(无论活动标签是一个新的url还是一个新的标签被启动),状态保持不变。
下面是我当前的代码,仅部分适用于活动标签:
manifest.json:
{
"name": "SwipeNav",
"action": {},
"manifest_version": 3,
"version": "0.1",
"description": "Navigates browser forward and back with 2 finger swiping",
"permissions": [
"activeTab",
"scripting",
"tabs",
"alarms"
],
"background": {
"service_worker": "background.js"
}
}
background.js
function twoFingerBack() {
console.log("Enabling 2 finger scrolling");
let timer;
window.addEventListener("wheel", function(event) {
clearTimeout(timer);
if (Math.abs(event.deltaX) > Math.abs(event.deltaY)) {
timer = setTimeout(function() {
if (event.deltaX > 0) {
history.back();
} else if (event.deltaX < 0) {
history.forward();
}
}, 200);
}
});
}
function removeExt() {
console.log("Disabling 2 finger scrolling");
window.removeEventListener("wheel", removeExt)
}
let enabled = true;
chrome.action.onClicked.addListener((tab) => {
enabled = !enabled;
if (enabled) {
if (!tab.url.includes("chrome://")) {
chrome.scripting.executeScript({
target: { tabId: tab.id },
function: twoFingerBack
});
}
} else {
if (!tab.url.includes("chrome://")) {
chrome.scripting.executeScript({
target: { tabId: tab.id },
function: removeExt
});
}
}
});
我已经读到我可以使用chrome.tabs.onActivated
,但是我根本不能让这个工作。不确定这是否是正确的道路。
任何帮助都很感激...谢谢!
1条答案
按热度按时间ny6fqffe1#
1.将状态保存到存储中。由于
localStorage
在service worker中不可用,因此您可以使用chrome.storage.local。1.注册/取消注册内容脚本,以便它在下次加载选项卡时自动运行。
1.使用executeScript处理所有选项卡,以将更改应用于当前加载的页。
1.对wheel侦听器使用全局函数,并在
removeEventListener
中使用其名称。//清单. json
"permissions"
内添加"storage"
"host_permissions": ["<all_urls>"]
//背景. js
//内容. js