The*_*ram 4 javascript web-worker
是否可以在 Web Worker 中注册除 和 之外的事件的侦听'message'器'error'?例如
addEventListener('keydown', function (e) {
postMessage('test');
});
Run Code Online (Sandbox Code Playgroud)
编辑:
根据@TJCrowder 的说法,这是不可能的。然而,就我而言,我能够用消息来模拟它,就像这样:
在工人中:
const handlers = {};
function registerKeyHandler(keycode, callback) {
postMessage({
type: 'REGISTER_KEY_HANDLER',
keycode: keycode,
});
handlers[keycode] = handlers[keycode] || [];
handlers[keycode].push(callback);
}
function onKeydown(keycode) {
const hs = handlers[keycode] || [];
hs.forEach(h => h());
}
self.onmessage = function(msg) {
switch (msg.type) {
case 'KEYDOWN':
onKeydown(msg.payload.keycode);
break;
}
};
Run Code Online (Sandbox Code Playgroud)
外部:
worker.onmessage = function(msg) {
switch (msg.type) {
case 'REGISTER_KEY_HANDLER':
window.addEventListener('keydown', function (e) {
if (e.keyCode !== msg.keycode) {
return;
}
worker.postMessage({
type: 'KEYDOWN',
keycode: msg.keycode,
});
});
break;
}
};
Run Code Online (Sandbox Code Playgroud)