首页 > 解决方案 > 键盘输入不适用于 WebAssembly 和 Emscripten

问题描述

我有一些基本的代码可以呈现到 webgl 画布元素。当我调用事件注册方法时,我要么根本没有回调(当我指定画布名称或 #canvas 时,或者当我指定 #document 或 #window 时出现与无法注册空对象相关的错误)

emscripten_set_keydown_callback("#canvas", nullptr, true, Platform::keyCallback);
emscripten_set_keyup_callback("#canvas", nullptr, true, Platform::keyCallback);

我在 html 中的 Canvas 元素是

<canvas id="canvas" oncontextmenu="event.preventDefault()" width="640px" height="480px"></canvas>

我的输入测试方法是..

EM_BOOL Platform::keyCallback(int eventType, const EmscriptenKeyboardEvent *keyEvent, void *userData)
{
    printf("TEST\n");
}

注意: printf 确实有效,因为我有其他输出到控制台。

在此先感谢您的帮助

标签: c++emscriptenwebassembly

解决方案


原来问题出在 HTML 文件中。我需要在画布中添加“tabindex=-1”。例如:

<canvas id="canvas" oncontextmenu="event.preventDefault()" width="640px" height="480px" tabindex=-1></canvas>

由于此更改,代码现在似乎可以完美运行。


推荐阅读