mirror of
https://github.com/fofolee/uTools-quickcommand.git
synced 2025-06-08 22:51:25 +08:00
87 lines
2.1 KiB
JavaScript
87 lines
2.1 KiB
JavaScript
const { initCDP, cleanupCDP } = require("./cdp");
|
|
const { getCurrentClientPort } = require("./client");
|
|
const CDP = require("chrome-remote-interface");
|
|
|
|
const getTargets = async () => {
|
|
const port = await getCurrentClientPort();
|
|
return await CDP.List({ port });
|
|
};
|
|
|
|
const searchTarget = async (tab) => {
|
|
if (!tab || !tab.by || !tab.searchValue || tab.by === "active") {
|
|
const currentTab = await getCurrentTab();
|
|
return currentTab;
|
|
}
|
|
|
|
const targets = await getTargets();
|
|
const target = targets.find((target) =>
|
|
target[tab.by].includes(tab.searchValue)
|
|
);
|
|
if (!target) {
|
|
throw new Error(`未找到目标标签页: ${tab.by} = ${tab.searchValue}`);
|
|
}
|
|
return target;
|
|
};
|
|
|
|
const getTabs = async () => {
|
|
const targets = await getTargets();
|
|
return targets
|
|
.filter((target) => target.type === "page")
|
|
.map((target) => ({
|
|
url: target.url,
|
|
title: target.title,
|
|
id: target.id,
|
|
}));
|
|
};
|
|
|
|
const getCurrentTab = async () => {
|
|
const targets = await getTargets();
|
|
const currentTarget = targets.find((target) => target.type === "page");
|
|
|
|
if (!currentTarget) {
|
|
throw new Error("未找到当前活动标签页");
|
|
}
|
|
|
|
return {
|
|
url: currentTarget.url,
|
|
title: currentTarget.title,
|
|
id: currentTarget.id,
|
|
};
|
|
};
|
|
|
|
const activateTab = async (tab) => {
|
|
const target = await searchTarget(tab);
|
|
const port = await getCurrentClientPort();
|
|
await CDP.Activate({ id: target.id, port });
|
|
};
|
|
|
|
const createNewTab = async (url = "about:blank") => {
|
|
const currentTab = await getCurrentTab();
|
|
const { Target } = await initCDP(currentTab.id);
|
|
const { targetId } = await Target.createTarget({ url });
|
|
const { targetInfo } = await Target.getTargetInfo({ targetId });
|
|
await cleanupCDP(currentTab.id);
|
|
return {
|
|
url: targetInfo.url,
|
|
title: targetInfo.title,
|
|
id: targetId,
|
|
};
|
|
};
|
|
|
|
const closeTab = async (tab) => {
|
|
const target = await searchTarget(tab);
|
|
const port = await getCurrentClientPort();
|
|
await cleanupCDP(target.id);
|
|
await CDP.Close({ id: target.id, port });
|
|
};
|
|
|
|
module.exports = {
|
|
getTabs,
|
|
getCurrentTab,
|
|
activateTab,
|
|
createNewTab,
|
|
closeTab,
|
|
getTargets,
|
|
searchTarget,
|
|
};
|