emscripten-core/emscripten

Bug: emscripten_set_wheel_callback is passive

Open

#10,091 创建于 2019年12月20日

在 GitHub 查看
 (6 评论) (1 反应) (0 负责人)C++ (3,519 fork)batch import
good first bughelp wanted

仓库指标

Star
 (27,361 star)
PR 合并指标
 (平均合并 19天 10小时) (30 天内合并 147 个 PR)

描述

Repro:

#include <emscripten/emscripten.h>
#include <emscripten/html5.h>

int callback(int a, const EmscriptenWheelEvent* b, void* c) {
  return EM_TRUE; // Call preventDefault() on the event
}

int main() {
  emscripten_set_wheel_callback(0, 0, 0, callback);
  return 0;
}

Compile the above with 1.38.43-upstream and embed in a HTML file with <script src="a.out.js"></script>. Open the HTML file and scroll with the mouse wheel.

Unexpected: Chrome prints out this to the console:

[Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive. See https://www.chromestatus.com/features/6662647093133312

The fix is to add {passive: false} to the call to addEventListener like this:

window.addEventListener("wheel", callback, {passive: false});

Ideally this would be configurable in the emscripten_set_wheel_callback API call, but I don't see a way to do that.

See https://developers.google.com/web/updates/2017/01/scrolling-intervention for more information.

贡献者指南