This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Вызов функции vue.js в CEF из клиента

akudinov28

Мастер
24 Фев 2021
343
156
106
Добрый вечер! Возникла проблема, которую никак не могу решить уже на протяжении довольно долгого времени.
Версия RageMP 1.1. В браузере используется Vue.js 2 (with vue-cli). По совету других использую следующие функции:

На клиенте:
JavaScript:
browser.call('eventName');

в CEF:
JavaScript:
// В корневом компоненте App экземпляря Vue
    export default {
        // Здесь другие настройки компонента
        mounted() {
            window.mp.events.add('eventName', () => {
                alert('123');
            });
        }
    }

Проблема в том, что обработчик eventName в CEF не работает, когда запускаешь клиент с нуля. При этом сам браузер отрабатывается и показывается, но событие eventName не обрабатывается. При этом, если тут же просто через F1 перезайти на сервер, то событие начинает работать.

Воспроизведение проблемы по шагам:
  • Запускаем сервер
  • Запускаем клиент RageMP
  • Коннектимся к серверу
-- Браузер работает, страницу показывает, но событие eventName не выстреливает, alert не показывает --
- Через F1 реконнектимся к серверу
-- Браузер работает, вновь показывает страницу, но eventName уже начинает работать (выдает alert) --

Собственно, почему при запуске клиента с нуля не работает обработчик события eventName?
 

artemsiberian

Участник портала
22 Май 2021
59
10
50
Потому что у тебя все наоборот,
mounted метод инскапусулирован, он только выполняется, его можно вызвать только внутри маунта, mp.events.add это слушатель, он принимать должен вызовы с сервера или CEF, а не создавать их, то есть у тебя внутри маунта должен быть mp.trigger по идее, в общем у тебя там кампот какой то

плюс почитай в каком порядке хуки монтируются во вью, маунтед один из самых последних
 

akudinov28

Мастер
24 Фев 2021
343
156
106

Из документации:

Соответственно, такие методы имеют право на существование. Зачем мне mp.trigger, если я хочу вызвать из клиента CEF, а не наоборот?
Mounted метод выстреливает и запускает прослушиватель события с клиента. То есть то, что мне и нужно.

Что касается того, что mounted монтируется одним из последних - так мне оно и нужно. Я же собираюсь работать с экземпляром vue, зачем мне прослушивать событие до загрузки vue?

Повторюсь, при повторном подключении к серверу всё работает так, как и должно. Не работает только при первом запуске клиента. Такое ощущение, что на клиенте browser.call() срабатывает раньше, чем браузер полностью прогрузится.
 

artemsiberian

Участник портала
22 Май 2021
59
10
50
Ты когда переподключаешься к серверу у тебя 1 раз выдает алерт? или он выстреливает каждый раз когда вызываешь этот эвент?

Попробуй еще так вызвать, mp.events.call
browser.call сомнительная функция
 
Последнее редактирование:

akudinov28

Мастер
24 Фев 2021
343
156
106
Я с клиента сразу запускаю browser.call().
При первом запуске клиента вообще не выдаёт алерт, при повторных - один раз, как и должно.
 

artemsiberian

Участник портала
22 Май 2021
59
10
50
Попробуй несолько раз вызвать у меня есть какие то сомнения, что это именно browser.call вызывает,сделай например два вызова подрят, вылетит ли два алерта

Попробуй еще так вызвать, mp.events.call
browser.call сомнительная функция