mirror of
https://github.com/yaklang/yaklang-chrome-extension.git
synced 2026-09-26 13:11:53 +08:00
feat(browser): add managed instance agent capabilities
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>正在准备浏览器实例</title>
|
||||
</head>
|
||||
<body>
|
||||
<p id="status">正在同步浏览器实例身份…</p>
|
||||
<script type="module" src="./main.ts"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,46 @@
|
||||
import { browser } from 'wxt/browser';
|
||||
import { request } from '@/platform/messaging/runtime';
|
||||
|
||||
const status = document.getElementById('status');
|
||||
const fail = (message: string) => {
|
||||
if (status) status.textContent = message;
|
||||
};
|
||||
|
||||
async function bootstrap(): Promise<void> {
|
||||
const query = new URLSearchParams(location.search);
|
||||
const manager = query.get('manager');
|
||||
const instanceId = query.get('instanceId') || '';
|
||||
const badge = query.get('badge') || '';
|
||||
const target = query.get('target') || 'chrome://newtab/';
|
||||
if (!['ytray', 'yakit'].includes(manager || '')
|
||||
|| !/^[A-Za-z0-9-]{1,160}$/.test(instanceId)
|
||||
|| !/^[A-Z]{1,2}$/.test(badge)) {
|
||||
throw new Error('浏览器实例身份参数无效');
|
||||
}
|
||||
const protocol = new URL(target).protocol;
|
||||
if (!['http:', 'https:', 'chrome:'].includes(protocol)
|
||||
&& target !== 'data:text/html,<title>YTray</title>') {
|
||||
throw new Error('浏览器实例目标地址无效');
|
||||
}
|
||||
|
||||
await request('bridge.managed-instance.bind', {
|
||||
manager: manager as 'ytray' | 'yakit', instanceId, badge,
|
||||
});
|
||||
|
||||
const current = await browser.tabs.getCurrent();
|
||||
if (!current?.id) {
|
||||
location.replace(target);
|
||||
return;
|
||||
}
|
||||
if (query.get('restore') === '1') {
|
||||
await new Promise((resolve) => globalThis.setTimeout(resolve, 400));
|
||||
const tabs = await browser.tabs.query({ currentWindow: true });
|
||||
if (tabs.some((tab) => tab.id !== current.id)) {
|
||||
await browser.tabs.remove(current.id);
|
||||
return;
|
||||
}
|
||||
}
|
||||
await browser.tabs.update(current.id, { url: target });
|
||||
}
|
||||
|
||||
void bootstrap().catch((error) => fail(error instanceof Error ? error.message : String(error)));
|
||||
Reference in New Issue
Block a user