I've fixed it moving the definition of callback as a property of my script so it won't get freed.
var callback = JavaScriptBridge.create_callback(on_message_received)
func _ready():
var window = JavaScriptBridge.get_interface("window")
window.addEventListener("message", callback)
func on_message_received(event):
print("Message received in godot. ")