JS CEF выводим ошибки в debug консоль

По умолчанию ошибки js кода внутри CEF браузера выводятся только в текстовый файлик ragemp/clientdata/cef_game_logs.txt. Также можно получить доступ к ним через CEF Dev Tools. Но это далеко не всегда удобно.

Есть более простой способ, о котором не все знают. Возможно кому-то понадобится.

Идея простая - мы отлавливаем любые ошибки которые генерирует браузер и передаем их на клиент. Дальше уже можно распоряжаться этим как душа пожелает. Для примера я буду выводить ошибки в клиентскую дебаг консоль (F11).

Чтобы отлавливать ошибку в браузере мы должны добавить в браузерном коде обработчик события onerror
HTML:
<script>
    window.onerror = function(msg, url, line) {
        mp.trigger("cef:error", msg, url, line)
    };
</script>
Желательно объявлять его в самом начале html странички или самого верхнего js скрипта. Иначе ошибки, которые могут возникнуть до этого места могут проскочить мимо.

Примечание: событие onerror вызывается для всех не перехваченных ошибок. Т. е. если где-то в браузерном коде есть обработчики ошибок в try catch, то такие ошибки сюда прилетать не будут.

И соответственно на клиенте добавляем event
JavaScript:
mp.events.add("cef:error", (errorMessage, url, line) => {
    mp.console.logError(`${errorMessage} at ${url} line ${line.toString()}`);
});

1631461476735.png

Преимущество данного метода еще и в том, что мы можем передавать текст ошибок на сервер. Это позволит увидеть не только ошибки у локального игрока, а у всех игроков на сервере.

Помимо этих трех значений msg, url, line можно еще получить доступ к объекту Error и более детальной информации об ошибке включая стек вызовов.

Полезные ссылки:
 
Яндекс.Метрика
Верх