Add tool to clean up facebook
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
const statusEl = document.getElementById("status");
|
||||
|
||||
function setStatus(text) {
|
||||
statusEl.textContent = text;
|
||||
}
|
||||
|
||||
async function getFacebookTab() {
|
||||
const tabs = await chrome.tabs.query({
|
||||
active: true,
|
||||
currentWindow: true,
|
||||
});
|
||||
const tab = tabs[0];
|
||||
if (!tab?.id) throw new Error("No active tab");
|
||||
if (!/^https:\/\/(www\.)?facebook\.com\//i.test(tab.url || "")) {
|
||||
throw new Error("Open a facebook.com Activity Log tab first");
|
||||
}
|
||||
return tab;
|
||||
}
|
||||
|
||||
async function ping(tabId) {
|
||||
return chrome.tabs.sendMessage(tabId, { type: "FB_CLEANER_PING" });
|
||||
}
|
||||
|
||||
async function injectContent(tabId) {
|
||||
if (!chrome.scripting?.executeScript) {
|
||||
throw new Error(
|
||||
"Reload this extension on chrome://extensions, then refresh Facebook"
|
||||
);
|
||||
}
|
||||
await chrome.scripting.executeScript({
|
||||
target: { tabId },
|
||||
files: ["content.js"],
|
||||
});
|
||||
if (chrome.scripting.insertCSS) {
|
||||
await chrome.scripting.insertCSS({
|
||||
target: { tabId },
|
||||
files: ["panel.css"],
|
||||
});
|
||||
}
|
||||
// Give the content script a moment to register listeners
|
||||
await new Promise((r) => setTimeout(r, 150));
|
||||
}
|
||||
|
||||
async function ensureContent(tabId) {
|
||||
try {
|
||||
await ping(tabId);
|
||||
} catch {
|
||||
await injectContent(tabId);
|
||||
await ping(tabId);
|
||||
}
|
||||
}
|
||||
|
||||
async function send(type) {
|
||||
const tab = await getFacebookTab();
|
||||
await ensureContent(tab.id);
|
||||
return chrome.tabs.sendMessage(tab.id, { type });
|
||||
}
|
||||
|
||||
document.getElementById("start").addEventListener("click", async () => {
|
||||
try {
|
||||
setStatus("Starting…");
|
||||
const res = await send("FB_CLEANER_START");
|
||||
setStatus(res?.ok ? "Deletion started on the page" : res?.error || "Failed");
|
||||
} catch (e) {
|
||||
setStatus(e.message || String(e));
|
||||
}
|
||||
});
|
||||
|
||||
document.getElementById("stop").addEventListener("click", async () => {
|
||||
try {
|
||||
setStatus("Stopping…");
|
||||
const res = await send("FB_CLEANER_STOP");
|
||||
setStatus(res?.ok ? "Stop requested" : res?.error || "Failed");
|
||||
} catch (e) {
|
||||
setStatus(e.message || String(e));
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user