Первое, что нужно знать, это то, что нет ни нативной библиотеки, ни API для WebAssembly (я имею в виду ... все же, для MVP. Существуют нативные функции, такие как потоки, входящие в функцию после MVP ).Это означает, что все системные библиотеки в C ++ реализуются путем импорта эмулированных функций JavaScript.Поэтому, если вы ищете встроенные функции, такие как обнаружение событий закрытия, вам следует проверить, есть ли API-интерфейсы JS / HTML5, которые делают подобные вещи.
Чтобы увидеть, как это работает, откройте сгенерированный файл .wast
и найдитеimport
инструкции и сгенерированные файлы JS.Кроме того, вам может потребоваться выполнить прямой поиск в Emscripten , чтобы проверить, есть ли привязки JS / HTML5, доступные на стороне C ++, поскольку их документация достаточно велика и ее трудно просматривать.
Придерживаниек слову, события HTML5, которые вызываются при закрытии: beforeunload
и unload
.Я бы предпочел использовать событие beforeunload
.Emscripten предоставляет em_beforeunload_callback
тип функции обратного вызова и emscripten_set_beforeunload_callback
для регистрации в html5.h привязках .
В противном случае вы используете их напрямую.Например:
В C ++:
void EMSCRIPTEN_KEEPALIVE clean_stuff() {
// Clean up the mess...
// You should use EMSCRIPTEN_KEEPALIVE or
// add it to EXPORTED_FUNCTIONS in emcc compilation options
// to make it callable in JS side.
}
В JS:
window.addEventListener("beforeunload", function (event) {
// Exported functions are prefixed by an underscore
Module._clean_stuff();
});