mirror of
https://github.com/CharaChorder/DeviceManager.git
synced 2025-12-12 22:06:18 +00:00
feat: new sharing system
feat: support legacy layout import
This commit is contained in:
@@ -1,42 +1,49 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>iFrame Sandbox</title>
|
||||
<script>
|
||||
let ongoingRequest
|
||||
let resolveRequest
|
||||
let source
|
||||
async function post(channel, args) {
|
||||
while (ongoingRequest) {
|
||||
await ongoingRequest
|
||||
}
|
||||
ongoingRequest = new Promise(resolve => {
|
||||
resolveRequest = resolve
|
||||
source.postMessage([channel, args], "*")
|
||||
})
|
||||
ongoingRequest.then(() => {
|
||||
ongoingRequest = undefined
|
||||
})
|
||||
return ongoingRequest
|
||||
}
|
||||
|
||||
window.addEventListener('message', event => {
|
||||
if ("response" in event.data) {
|
||||
resolveRequest(event.data.response)
|
||||
} else {
|
||||
source = event.source
|
||||
|
||||
var Action = event.data.actionCodes
|
||||
Object.assign(Action, Object.fromEntries(Object.values(event.data.actionCodes).filter(it => !!it.id).map(it => [it.id, it])))
|
||||
|
||||
var Chara = {}
|
||||
for (const fn of event.data.charaChannels) {
|
||||
Chara[fn] = (...args) => post(fn, args)
|
||||
<head>
|
||||
<title>iFrame Sandbox</title>
|
||||
<script>
|
||||
let ongoingRequest
|
||||
let resolveRequest
|
||||
let source
|
||||
async function post(channel, args) {
|
||||
while (ongoingRequest) {
|
||||
await ongoingRequest
|
||||
}
|
||||
|
||||
eval(`(async function(){${event.data.script}})()`)
|
||||
ongoingRequest = new Promise(resolve => {
|
||||
resolveRequest = resolve
|
||||
source.postMessage([channel, args], "*")
|
||||
})
|
||||
ongoingRequest.then(() => {
|
||||
ongoingRequest = undefined
|
||||
})
|
||||
return ongoingRequest
|
||||
}
|
||||
})
|
||||
</script>
|
||||
</head>
|
||||
</html>
|
||||
|
||||
window.addEventListener("message", event => {
|
||||
if ("response" in event.data) {
|
||||
resolveRequest(event.data.response)
|
||||
} else {
|
||||
source = event.source
|
||||
|
||||
var Action = event.data.actionCodes
|
||||
Object.assign(
|
||||
Action,
|
||||
Object.fromEntries(
|
||||
Object.values(event.data.actionCodes)
|
||||
.filter(it => !!it.id)
|
||||
.map(it => [it.id, it]),
|
||||
),
|
||||
)
|
||||
|
||||
var Chara = {}
|
||||
for (const fn of event.data.charaChannels) {
|
||||
Chara[fn] = (...args) => post(fn, args)
|
||||
}
|
||||
|
||||
eval(`(async function(){${event.data.script}})()`)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
</head>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user