mirror of
https://github.com/CharaChorder/DeviceManager.git
synced 2026-01-04 00:52:48 +00:00
42 lines
1.1 KiB
HTML
42 lines
1.1 KiB
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)
|
|
}
|
|
|
|
eval(`(async function(){${event.data.script}})()`)
|
|
}
|
|
})
|
|
</script>
|
|
</head>
|
|
</html> |