mirror of
https://github.com/Shik3i/KoalaSync.git
synced 2026-07-26 12:08:15 +00:00
41 lines
1.5 KiB
JavaScript
41 lines
1.5 KiB
JavaScript
/* global cloneInto */
|
|
/**
|
|
* KoalaSync Bridge Script
|
|
* Injected into sync.koalastuff.net to facilitate communication between
|
|
* the landing page and the extension.
|
|
*/
|
|
|
|
// 1. Signal presence to the website
|
|
document.documentElement.dataset.koalasyncInstalled = 'true';
|
|
|
|
// 2. Listen for Join Requests from the Website
|
|
window.addEventListener('KOALASYNC_JOIN_REQUEST', (e) => {
|
|
if (!e || !e.detail) return;
|
|
const { roomId, password, chatKey, useCustomServer, serverUrl } = e.detail;
|
|
chrome.runtime.sendMessage({
|
|
type: 'WEB_JOIN_REQUEST',
|
|
roomId,
|
|
password,
|
|
chatKey,
|
|
useCustomServer,
|
|
serverUrl
|
|
}).catch(() => {});
|
|
});
|
|
|
|
// 3. Listen for Status Updates from the Extension and relay to Website
|
|
chrome.runtime.onMessage.addListener((msg) => {
|
|
if (!msg) return;
|
|
if (msg.type === 'JOIN_STATUS') {
|
|
const detail = { success: msg.success, message: msg.message };
|
|
// Firefox MV3 content scripts run in an isolated world. When dispatching
|
|
// a CustomEvent with a detail object, Firefox wraps it in an XrayWrapper
|
|
// that the page's JavaScript cannot destructure (Permission denied).
|
|
// cloneInto() exposes the object to the page's context correctly.
|
|
// Chrome doesn't have this issue — cloneInto() is undefined there.
|
|
const safeDetail = typeof cloneInto === 'function'
|
|
? cloneInto(detail, document.defaultView)
|
|
: detail;
|
|
window.dispatchEvent(new CustomEvent('KOALASYNC_STATUS', { detail: safeDetail }));
|
|
}
|
|
});
|