mirror of
https://github.com/movixcorp/MovixOpenSource.git
synced 2026-07-27 05:02:08 +00:00
Ios test v2
This commit is contained in:
parent
59864266b1
commit
85ed344202
1 changed files with 82 additions and 32 deletions
|
|
@ -1,7 +1,7 @@
|
|||
// ==UserScript==
|
||||
// @name Movix Proxy Extension (Tampermonkey)
|
||||
// @namespace https://movix.cash
|
||||
// @version 1.4.4
|
||||
// @version 1.4.5
|
||||
// @description Extension proxy pour Live TV Movix - Contourne CORS, injecte les headers et extrait les sources Nexus - version userscript Tampermonkey
|
||||
// @author Movix
|
||||
// @match http://localhost/*
|
||||
|
|
@ -5136,25 +5136,40 @@
|
|||
// --- END extension/Chrome/background.js ---
|
||||
|
||||
function postExtensionResponse(messageId, success, payload) {
|
||||
pageWindow.postMessage(
|
||||
success
|
||||
? {
|
||||
source: "MOVIX_EXTENSION",
|
||||
messageId,
|
||||
success: true,
|
||||
data: payload,
|
||||
}
|
||||
: {
|
||||
source: "MOVIX_EXTENSION",
|
||||
messageId,
|
||||
success: false,
|
||||
error:
|
||||
payload instanceof Error
|
||||
? payload.message
|
||||
: payload?.error || String(payload || "Erreur inconnue"),
|
||||
},
|
||||
"*",
|
||||
);
|
||||
const response = success
|
||||
? {
|
||||
source: "MOVIX_EXTENSION",
|
||||
messageId,
|
||||
success: true,
|
||||
data: payload,
|
||||
}
|
||||
: {
|
||||
source: "MOVIX_EXTENSION",
|
||||
messageId,
|
||||
success: false,
|
||||
error:
|
||||
payload instanceof Error
|
||||
? payload.message
|
||||
: payload?.error || String(payload || "Erreur inconnue"),
|
||||
};
|
||||
|
||||
// Transport 1 — postMessage (desktop extension + desktop Tampermonkey).
|
||||
pageWindow.postMessage(response, "*");
|
||||
|
||||
// Transport 2 — CustomEvent on the shared document. iOS userscript managers run
|
||||
// in an isolated world whose window differs from the page's and where postMessage
|
||||
// may not bridge, but the document is shared (the dataset flag already proves it),
|
||||
// so a CustomEvent always reaches the page. detail is a JSON string because objects
|
||||
// don't survive the world boundary.
|
||||
try {
|
||||
document.dispatchEvent(
|
||||
new CustomEvent("MOVIX_EXTENSION_RESPONSE", {
|
||||
detail: JSON.stringify(response),
|
||||
}),
|
||||
);
|
||||
} catch (_) {
|
||||
/* CustomEvent unsupported — postMessage path still active */
|
||||
}
|
||||
}
|
||||
|
||||
async function requestAction(action, payload) {
|
||||
|
|
@ -5216,23 +5231,32 @@
|
|||
pageWindow.dispatchEvent(new CustomEvent("movix-extension-loaded"));
|
||||
}
|
||||
|
||||
pageWindow.addEventListener("message", async (event) => {
|
||||
// Do NOT gate on event.source === pageWindow: on iOS userscript managers
|
||||
// (Stay, Userscripts) this script runs in an isolated world whose window
|
||||
// differs from the page's, so the identity check drops every request and the
|
||||
// page times out. Same-origin + the "MOVIX_WEB" tag is enough.
|
||||
const sameOrigin =
|
||||
!event.origin || event.origin === pageWindow.location.origin;
|
||||
// The page emits each request on two transports (postMessage + CustomEvent on the
|
||||
// shared document) because iOS userscript managers run in an isolated world where
|
||||
// postMessage may not bridge. Dedupe by messageId so the action runs only once.
|
||||
const processedRequestIds = new Set();
|
||||
|
||||
async function handleExtensionRequest(data) {
|
||||
if (
|
||||
!sameOrigin ||
|
||||
!event.data ||
|
||||
event.data.source !== "MOVIX_WEB" ||
|
||||
event.data.type !== "EXTENSION_REQUEST"
|
||||
!data ||
|
||||
data.source !== "MOVIX_WEB" ||
|
||||
data.type !== "EXTENSION_REQUEST"
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
const { action, payload, messageId } = event.data;
|
||||
const { action, payload, messageId } = data;
|
||||
|
||||
if (messageId) {
|
||||
if (processedRequestIds.has(messageId)) {
|
||||
return;
|
||||
}
|
||||
processedRequestIds.add(messageId);
|
||||
if (processedRequestIds.size > 500) {
|
||||
processedRequestIds.delete(processedRequestIds.values().next().value);
|
||||
}
|
||||
}
|
||||
|
||||
const result = await requestAction(action, payload);
|
||||
|
||||
if (result.success) {
|
||||
|
|
@ -5244,6 +5268,32 @@
|
|||
result.error || "Erreur inconnue",
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Transport 1 — postMessage. Do NOT gate on event.source === pageWindow: on iOS the
|
||||
// isolated-world window differs from the page's, so an identity check drops every
|
||||
// request. Same-origin + the "MOVIX_WEB" tag is enough.
|
||||
pageWindow.addEventListener("message", (event) => {
|
||||
const sameOrigin =
|
||||
!event.origin || event.origin === pageWindow.location.origin;
|
||||
if (!sameOrigin) {
|
||||
return;
|
||||
}
|
||||
handleExtensionRequest(event.data);
|
||||
});
|
||||
|
||||
// Transport 2 — CustomEvent on the shared document (reliable across isolated worlds).
|
||||
document.addEventListener("MOVIX_WEB_REQUEST", (event) => {
|
||||
let data;
|
||||
try {
|
||||
data =
|
||||
typeof event.detail === "string"
|
||||
? JSON.parse(event.detail)
|
||||
: event.detail;
|
||||
} catch (_) {
|
||||
return;
|
||||
}
|
||||
handleExtensionRequest(data);
|
||||
});
|
||||
|
||||
exposePageApi();
|
||||
|
|
|
|||
Loading…
Reference in a new issue