По умолчанию ошибки js кода внутри CEF браузера выводятся только в текстовый файлик
Есть более простой способ, о котором не все знают. Возможно кому-то понадобится.
Идея простая - мы отлавливаем любые ошибки которые генерирует браузер и передаем их на клиент. Дальше уже можно распоряжаться этим как душа пожелает. Для примера я буду выводить ошибки в клиентскую дебаг консоль (F11).
Чтобы отлавливать ошибку в браузере мы должны добавить в браузерном коде обработчик события onerror
Желательно объявлять его в самом начале html странички или самого верхнего js скрипта. Иначе ошибки, которые могут возникнуть до этого места могут проскочить мимо.
Примечание: событие onerror вызывается для всех не перехваченных ошибок. Т. е. если где-то в браузерном коде есть обработчики ошибок в try catch, то такие ошибки сюда прилетать не будут.
И соответственно на клиенте добавляем event
Преимущество данного метода еще и в том, что мы можем передавать текст ошибок на сервер. Это позволит увидеть не только ошибки у локального игрока, а у всех игроков на сервере.
Помимо этих трех значений msg, url, line можно еще получить доступ к объекту Error и более детальной информации об ошибке включая стек вызовов.
Полезные ссылки:
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>
Примечание: событие onerror вызывается для всех не перехваченных ошибок. Т. е. если где-то в браузерном коде есть обработчики ошибок в try catch, то такие ошибки сюда прилетать не будут.
И соответственно на клиенте добавляем event
JavaScript:
mp.events.add("cef:error", (errorMessage, url, line) => {
mp.console.logError(`${errorMessage} at ${url} line ${line.toString()}`);
});
Преимущество данного метода еще и в том, что мы можем передавать текст ошибок на сервер. Это позволит увидеть не только ошибки у локального игрока, а у всех игроков на сервере.
Помимо этих трех значений msg, url, line можно еще получить доступ к объекту Error и более детальной информации об ошибке включая стек вызовов.
Полезные ссылки:
GlobalEventHandlers.onerror - Интерфейсы веб API | MDN
Обработчик события для ошибок среды Javascript.
developer.mozilla.org
Мониторинг JavaScript-ошибок с помощью window.onerror
Материал, перевод которого мы сегодня публикуем, посвящён обработке JS-ошибок с помощью window.onerror . Это — особое событие браузера, которое вызывается при появлении неперехваченных ошибок. Здесь...
habr.com