haixunMaster/extension/haixun-threads-sync/content-haixun.js

57 lines
1.5 KiB
JavaScript

(() => {
if (globalThis.__HAIXUN_THREADS_BRIDGE__) return;
globalThis.__HAIXUN_THREADS_BRIDGE__ = true;
const ROOT = document.documentElement;
ROOT.dataset.haixunExtension = "1";
ROOT.dataset.haixunExtensionVersion = "2";
function announceReady() {
window.postMessage({ type: "HAIXUN_EXTENSION_READY", version: 2 }, "*");
}
window.addEventListener("message", (event) => {
if (event.source !== window) return;
if (event.data?.type === "HAIXUN_PING_EXTENSION") {
announceReady();
return;
}
if (event.data?.type !== "HAIXUN_REQUEST_THREADS_SYNC") return;
chrome.runtime
.sendMessage({
action: "sync",
serverUrl: event.data.serverUrl ?? window.location.origin,
accountId: event.data.accountId,
accessToken: event.data.accessToken,
apiVersion: event.data.apiVersion ?? "go-v1",
})
.then((result) => {
window.postMessage(
{
type: "HAIXUN_THREADS_SYNC_RESULT",
...(result ?? {}),
},
"*"
);
})
.catch((error) => {
const message =
chrome.runtime.lastError?.message ??
(error instanceof Error ? error.message : "同步失敗");
window.postMessage(
{
type: "HAIXUN_THREADS_SYNC_RESULT",
success: false,
valid: false,
message,
},
"*"
);
});
});
announceReady();
})();