diff --git a/src/joystick/emscripten/SDL_sysjoystick.c b/src/joystick/emscripten/SDL_sysjoystick.c index 91d3ef47bd..2ff71d0785 100644 --- a/src/joystick/emscripten/SDL_sysjoystick.c +++ b/src/joystick/emscripten/SDL_sysjoystick.c @@ -502,7 +502,11 @@ static bool EMSCRIPTEN_JoystickOpen(SDL_Joystick *joystick, int device_index) item->rumble_available = MAIN_THREAD_EM_ASM_INT({ let gamepad = navigator['getGamepads']()[$0]; - return gamepad && 'vibrationActuator' in gamepad; // Don't check the vibrationActuator.effects array here, because it's not defined in Safari + // Don't check the vibrationActuator.effects array here, because it's not defined in Safari + if (!gamepad || !gamepad['vibrationActuator']) { + return false; + } + return true; }, item->index); if (item->rumble_available) { @@ -512,7 +516,10 @@ static bool EMSCRIPTEN_JoystickOpen(SDL_Joystick *joystick, int device_index) item->trigger_rumble_available = MAIN_THREAD_EM_ASM_INT({ let gamepad = navigator['getGamepads']()[$0]; // This effect is not supported in Safari, so it's okay for us to check the vibrationActuator.effects array here for the browsers that do support it - return gamepad && 'vibrationActuator' in gamepad && 'effects' in gamepad['vibrationActuator'] && gamepad['vibrationActuator']['effects']['includes']('trigger-rumble'); + if (!gamepad || !gamepad['vibrationActuator'] || !gamepad['vibrationActuator']['effects'] || !gamepad['vibrationActuator']['effects']['includes']('trigger-rumble')) { + return false; + } + return true; }, item->index); if (item->trigger_rumble_available) {