Emulatorfehler wird angezeigt
P粉447495069
2023-09-01 20:53:31
<p>Ich habe versucht, einen GBA-Emulator (https://gba.44670.org/), den ich online gefunden habe, zurückzuentwickeln und einen HTML-Extraktor zu verwenden, um zu versuchen, ihn zu replizieren. Ich wollte, dass es offline funktioniert, also habe ich alle Skripte auf meinen Computer heruntergeladen und dort ausgeführt. Danach wird die Schaltfläche „Datei auswählen“ jedoch nicht mehr angezeigt, sondern durch die Textzeile „Laden, bitte warten…“ ersetzt. Als ich mich eingehender mit dem Code befasste, stellte ich fest, dass er etwas mit WASM zu tun hat. Der Code lautet wie folgt: </p>
<pre class="brush:php;toolbar:false;"><div id="wasm-loading">
Laden, bitte warten...
</div>
<div id="select-rom" versteckt>
<input type="file" id="romFile" onchange="onFileSelected()"
<button onclick="$id('romFile').click()" id="btn-choose">Datei auswählen...</button>
</div></pre>
<p>Weitere Verweise auf WASM im Code finden Sie in der .js-Datei app.js: </p>
<pre class="brush:php;toolbar:false;">function wasmReady() {
romBuffer = Module._emuGetSymbol(1)
var ptr = Module._emuGetSymbol(2)
wasmSaveBuf = Module.HEAPU8.subarray(ptr, ptr + wasmSaveBufLen)
ptr = Module._emuGetSymbol(3)
imgFrameBuffer = new Uint8ClampedArray(Module.HEAPU8.buffer).subarray(ptr, ptr + 240 * 160 * 4)
idata = new ImageData(imgFrameBuffer, 240, 160)
isWasmReady = true
document.getElementById('wasm-loading').hidden = true
document.getElementById('select-rom').hidden = false
}</pre>
<p>Ich habe erwartet, dass es nach dem Herunterladen des Skripts wie gewohnt funktionieren würde. Ich meine, es hat immer noch Zugriff auf die Skripte, die es benötigt, oder? Ich habe versucht, den Text zu verbergen, indem ich die Wahr/Falsch-Anweisungen in <code>document.getElementById('select-rom').hidden = false</code> geändert habe, aber nichts scheint zu funktionieren. Irgendwelche Ideen? Dank im Voraus. </p>
<p>(Übrigens suche ich nach dem Dateipfad in vscode.dev. Es sieht so aus: <code><script src="/Scripts/44gba.js"></script> < ;script src="/Scripts /app.js"></script> <script src="/Scripts/localforage.js"></script> <script src=/Scripts/pako.min .js></script></code>
)</p>
要使用脚本将应用程序保留在本地,请记住两件事:
也就是说,复制您在响应中得到的相同 HTML (https://gba.44670.org/ ),这将保留文件结构。这是我得到的内容(
index.html
):然后您可以看到脚本路径,您将按照该路径创建文件:
此外,您还需要下载 WASM 文件(压缩后 651KB,未压缩 7.7MB)。您可以在此处下载压缩包(您可以在开发工具的“网络”选项卡中找到它):https ://gba.44670.org/build/44gba.wasm
最后,下载所有必要的文件(如果需要,还可以下载图标和图片,但不是必需的):
您将得到如下所示的结构:
现在,如果您可以从浏览器中停用 CORS,那就太好了。但如果没有,您必须从本地 HTTP 服务器提供服务。一种选择是安装 NPM 包: https://www.npmjs.com/package/http-服务器,运行
npm install --global http-server
。之后,只需导航到终端中的项目目录并启动服务器:您将看到正确的屏幕并加载 ROM,然后就完成了。
编辑:通过简单的 Hack 解决本地 CORS 问题
由于我知道您现在使用的是 ChromeOS,并且从技术上讲还不知道如何使用 Node、NPM 和 HTTP-Server 来处理它,因此我为您做了一些修改,并将 WASM 二进制内容直接放入 build/44gba.js,并在函数 readBinary 上返回该二进制内容,以便绕过 CORS 问题。您可以直接启动index.html。以下是新
build/44gba.js
文件的链接,只需将其内容替换为以下文件:https://sendeyo.com/en/b02f94b524,你们都很好。以下是更改内容: