• Из-за обновления GTA 5 (был добавлен новый патч) может временно не работать вход в RAGE Multiplayer.

    Ошибка: Ваша версия Grand Theft Auto V не поддерживается RAGE Multiplayer.
    ERROR: Your game version is not supported by RAGE Multiplayer.

    Данная ошибка говорит о том, что GTA V обновилась до новой версии (GTA Online тоже). Вам необходимо обновить саму игру в главном меню вашего приложения (Steam / Epic Games / Rockstar Games).
    Если после этого RAGE:MP все равно не работает - вам нужно дождаться выхода патча для самого мультиплеера (обычно это занимает от нескольких часов до нескольких дней).

    Новости и апдейты Rockstar Games - https://www.rockstargames.com/newswire/
    Статус всех служб для Rockstar Games Launcher и поддерживаемых игр: https://support.rockstargames.com/ru/servicestatus


    Grand Theft Auto 5 (+ GTA Online) последний раз были обновлены:

Вопрос вывод кнопок по верх браузера Создать тему

yaneagentfib

Новый участник
13 Июн 2023
47
4
43
здравствуйте дорогие форумчане, тут у меня вопрос возник, а каким образом можно вывести кнопку по верх браузера?
svelte
 

yaneagentfib

Новый участник
13 Июн 2023
47
4
43
извиняюсь, тяжело донести свою мысль до кого то.
я создаю браузер через - mp.browsers.new с ссылкой на сайт форума, могу ли я поверх этого браузера вывести кнопку "выйти" для удаления созданного браузера?
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
3,004
1,739
211
28
извиняюсь, тяжело донести свою мысль до кого то.
я создаю браузер через - mp.browsers.new с ссылкой на сайт форума, могу ли я поверх этого браузера вывести кнопку "выйти" для удаления созданного браузера?
Что мешает сделать кнопку внутри этого самого браузера с callback'ом, который бы отправлял запрос назад на клиент и закрывал этот самый браузер?
Браузер - страница, выведите на странице кнопку, а её обработчик заставьте посылать запрос в клиент (mp.trigger), на клиенте получайте этот ивент и закрывайте браузер - вопрос ведь решается за 5 секунд. Либо я Вас не понимаю, либо чего.
 

yaneagentfib

Новый участник
13 Июн 2023
47
4
43
Что мешает сделать кнопку внутри этого самого браузера с callback'ом, который бы отправлял запрос назад на клиент и закрывал этот самый браузер?
Браузер - страница, выведите на странице кнопку, а её обработчик заставьте посылать запрос в клиент (mp.trigger), на клиенте получайте этот ивент и закрывайте браузер - вопрос ведь решается за 5 секунд. Либо я Вас не понимаю, либо чего.
страница не моя, то есть изменить сам сайт возможности нету
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
3,004
1,739
211
28
страница не моя, то есть изменить сам сайт возможности нету
А сервер - твой?
Если твой, то у тебя должен быть доступ и к коду клиента, и к коду страницы.
В крайнем случае можно на клиенте, например, создать переменную, обозначающую, что мы на странице, которую можно закрыть, потом повесить listener на ESC и сверяться с переменной. Если кнопка нажата, а переменная в нужном нам положении - закрыть открытую страницу, а переменную сбросить. Но это уже скорее костыль, нежели нормальная работа.

Если не твой, то твой вопрос некорректен изначально и должен звучать так:
"Я играю на чужом сервере, хочу иметь возможность закрывать CEF по кнопке, как сделать?"
Но в таком случае мы просто ответим, что никак, потому что тут занимаются не взломом, а программированием.
 

yaneagentfib

Новый участник
13 Июн 2023
47
4
43
А сервер - твой?
Если твой, то у тебя должен быть доступ и к коду клиента, и к коду страницы.
В крайнем случае можно на клиенте, например, создать переменную, обозначающую, что мы на странице, которую можно закрыть, потом повесит listener на ESC и сверяться с переменной. Если кнопка нажата, а переменная в нужном нам положении - закрыть открытую страницу, а переменную сбросить. Но это уже скорее костыль, нежели нормальная работа.

Если не твой, то твой вопрос некорректен изначально и должен звучать так:
"Я играю на чужом сервере, хочу иметь возможность закрывать CEF по кнопке, как сделать?"
Но в таком случае мы просто ответим, что никак, потому что тут занимаются не взломом, а программированием.
спасибо, сервер мой, сейчас и реализован первый вариант.
в принципе ответ понятен, еще раз спасибо!
 
Реакции: XDeveluxe

akudinov28

Старожил
24 Фев 2021
430
210
106
спасибо, сервер мой, сейчас и реализован первый вариант.
в принципе ответ понятен, еще раз спасибо!
В качестве идеи, не знаю насчет работоспособности: можно попробовать вывести чужой сайт на своей странице в iframe, на свою же страницу вывести кнопку, на которую уже навесить коллбэк и делать с iframe все, что нужно.
 

kirillzver

Гуру
BackEnd developer
2 Ноя 2020
190
118
104
Не надо никаких танцев с бубном.
Нужен только доступ к объекту браузера, который создан.
А какая там открыта страница — существенной разницы нет.

В browser.execute вставляешь:

JavaScript:
document.addEventListener("DOMContentLoaded", () => { // Дожидаемся загрузки DOM дерева
    const button = document.createElement("button"); // инициализируем кнопку
    button.classList.add("btn"); // можем присвоить желаемый класс, например .btn
    button.innerHTML = "Нажми меня"; // Текст внутри кнопки

    button.onclick = function() {
        // любые действия при нажатии кнопки
        mp.trigger("browser.hidePage"); // например вызов эвента на клиент
    }

    document.body.appendChild(button); // вставляем кнопку в тэг body
    // как альтернатива, можно получить какой-то элемент, например с айди container и вставить туда
    const container = document.getElementById("container");
    container.appendChild(button);
    // тут уже всё зависит от фантазии, любые желаемые манипуляции.

    // точно также можно запихнуть и стили на страницу
    const styles = document.createElement("style");
    styles.innerText = ".btn{background: #000}";
    document.body.appendChild(styles); // теперь фон кнопки будет черный.
});
 
Реакции: XDeveluxe

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
3,004
1,739
211
28
Не надо никаких танцев с бубном.
Нужен только доступ к объекту браузера, который создан.
А какая там открыта страница — существенной разницы нет.

В browser.execute вставляешь:

JavaScript:
document.addEventListener("DOMContentLoaded", () => { // Дожидаемся загрузки DOM дерева
    const button = document.createElement("button"); // инициализируем кнопку
    button.classList.add("btn"); // можем присвоить желаемый класс, например .btn
    button.innerHTML = "Нажми меня"; // Текст внутри кнопки

    button.onclick = function() {
        // любые действия при нажатии кнопки
        mp.trigger("browser.hidePage"); // например вызов эвента на клиент
    }

    document.body.appendChild(button); // вставляем кнопку в тэг body
    // как альтернатива, можно получить какой-то элемент, например с айди container и вставить туда
    const container = document.getElementById("container");
    container.appendChild(button);
    // тут уже всё зависит от фантазии, любые желаемые манипуляции.

    // точно также можно запихнуть и стили на страницу
    const styles = document.createElement("style");
    styles.innerText = ".btn{background: #000}";
    document.body.appendChild(styles); // теперь фон кнопки будет черный.
});
Простите, я эти вот ваши фронтендерские магии не изучал :peppe_roller:
 
  • RoflanEbalo
Реакции: kirillzver и youngBeaver

youngBeaver

Покинул форум.
BackEnd developer
24 Янв 2023
1,202
469
171
Простите, я эти вот ваши фронтендерские магии не изучал :peppe_roller:
Идея с esc больше нравится, ибо современный пользователь потянется скорее к этой клавише чем будет в куче информации на странице искать кнопку закрыть/назад, далее вести туда мышкой и после нажимать на кнопку. Такой вариант тоже неплохой и реализуется достаточно легко:

JavaScript:
let browserState = [null, false] // первое значение отвечает за наличие браузера в массиве, есть ли он, второе значение за то, можно ли закрыть этот браузер нажатием

mp.keys.bind(keyCode, true, function() {
    if (browserState[0] && browserState[1]) {
        browserState[0].destroy();
    }
});

Насколько я помню то такое должно без проблем работать.
 
Реакции: kirillzver и XDeveluxe

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
3,004
1,739
211
28
Идея с esc больше нравится, ибо современный пользователь потянется скорее к этой клавише чем будет в куче информации на странице искать кнопку закрыть/назад, далее вести туда мышкой и после нажимать на кнопку. Такой вариант тоже неплохой и реализуется достаточно легко:

JavaScript:
let browserState = [null, false] // первое значение отвечает за наличие браузера в массиве, есть ли он, второе значение за то, можно ли закрыть этот браузер нажатием

mp.keys.bind(keyCode, true, function() {
    if (browserState[0] && browserState[1]) {
        browserState[0].destroy();
    }
});

Насколько я помню то такое должно без проблем работать.
Да, но я бы чуть-чуть подправил твой код, вот так:
JavaScript:
let browserState = [null, false]; // первое значение отвечает за наличие браузера в массиве, есть ли он, второе значение за то, можно ли закрыть этот браузер нажатием

mp.keys.bind(keyCode, true, function()
{
    if (!browserState[0] || !browserState[1]) return;
    
    browserState[0].destroy();
    browserState = [null, false];
});
 
Реакции: kirillzver

youngBeaver

Покинул форум.
BackEnd developer
24 Янв 2023
1,202
469
171
Да, но я бы чуть-чуть подправил твой код, вот так:
JavaScript:
let browserState = [null, false]; // первое значение отвечает за наличие браузера в массиве, есть ли он, второе значение за то, можно ли закрыть этот браузер нажатием

mp.keys.bind(keyCode, true, function()
{
    if (!browserState[0] || !browserState[1]) return;
   
    browserState[0].destroy();
    browserState = [null, false];
});
|| - или, значит, если есть объект ИЛИ его можно закрыть, тогда он закончит выполнения функции. Тогда, если есть объект, но будет falsy, то все равно попытается закрыть CEF
 

kirillzver

Гуру
BackEnd developer
2 Ноя 2020
190
118
104
Идея с esc больше нравится, ибо современный пользователь потянется скорее к этой клавише чем будет в куче информации на странице искать кнопку закрыть/назад, далее вести туда мышкой и после нажимать на кнопку. Такой вариант тоже неплохой и реализуется достаточно легко:

JavaScript:
let browserState = [null, false] // первое значение отвечает за наличие браузера в массиве, есть ли он, второе значение за то, можно ли закрыть этот браузер нажатием

mp.keys.bind(keyCode, true, function() {
    if (browserState[0] && browserState[1]) {
        browserState[0].destroy();
    }
});

Насколько я помню то такое должно без проблем работать.
Я использую оба варианта.
Так как есть те, кто даже не догадываются, что на ESC можно закрыть меню и начинают строчить админам, что у них ничего не закрывается ;D
Поэтому, лучше перестраховаться и реализовать обе версии.
 
Реакции: youngBeaver

youngBeaver

Покинул форум.
BackEnd developer
24 Янв 2023
1,202
469
171
Я использую оба варианта.
Так как есть те, кто даже не догадываются, что на ESC можно закрыть меню и начинают строчить админам, что у них ничего не закрывается ;D
Поэтому, лучше перестраховаться и реализовать обе версии.
Шутки про тестеров, как никогда актуальны :roflanebalo:
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
3,004
1,739
211
28
|| - или, значит, если есть объект ИЛИ его можно закрыть, тогда он закончит выполнения функции. Тогда, если есть объект, но будет falsy, то все равно попытается закрыть CEF
Почему?
Если browserState[0] (объект браузера) не будет равнятся чему-либо, кроме null, то на след.проверку мы не пройдём.
Если browserState[1] будет не true, то дальше мы тоже не пройдём.
Таким образом сквозь проверку пройдут ТОЛЬКо в случае, если browserState[0] != null И browserState[1] == true.
Я, конечно, могу тупить, но здесь вроде как всё хорошо.

|| - проверка "или", которая делается и прерывается, как только что-то пошло не по плану.
| - та же проверка "или", но не прервётся, если что-то пошло не по плану. Если бы в этом примере я использовал именно этот знак, то получилась бы ошибка.
 

kirillzver

Гуру
BackEnd developer
2 Ноя 2020
190
118
104
🌚
JavaScript:
let browser = mp.browsers.new("");
      
mp.keys.bind(keyCode, true, () => {
    if (!browser) return;
    if (!mp.borwsers.exists(browser)) return;
    
    browser.destroy();
});
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
3,004
1,739
211
28
🌚
JavaScript:
let browser = mp.browsers.new("");
    
mp.keys.bind(keyCode, true, () => {
    if (!browser) return;
    if (!mp.borwsers.exists(browser)) return;
  
    browser.destroy();
});
Насколько я понимаю, человеку нужно контролировать возможность закрытия, а не в любой момент давать такую возможность.
Конечно, если не надо, то твой вариант еще лучше. Но опять же - забыли убирать значение из переменной после удаления.
 
Реакции: kirillzver

youngBeaver

Покинул форум.
BackEnd developer
24 Янв 2023
1,202
469
171
Почему?
Если browserState[0] (объект браузера) не будет равнятся чему-либо, кроме null, то на след.проверку мы не пройдём.
Если browserState[1] будет не true, то дальше мы тоже не пройдём.
Таким образом сквозь проверку пройдут ТОЛЬКо в случае, если browserState[0] != null И browserState[1] == true.
Я, конечно, могу тупить, но здесь вроде как всё хорошо.

|| - проверка "или", которая делается и прерывается, как только что-то пошло не по плану.
| - та же проверка "или", но не прервётся, если что-то пошло не по плану. Если бы в этом примере я использовал именно этот знак, то получилась бы ошибка.
1694160804271.png
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
3,004
1,739
211
28
1694160924346.png


JavaScript:
let browserState = [null, false]; // первое значение отвечает за наличие браузера в массиве, есть ли он, второе значение за то, можно ли закрыть этот браузер нажатием

function Test() {
    console.log("entry");
    if (!browserState[0] || !browserState[1]) return;
    
    console.log("delete");
    browserState = [null, false];
}

Test();
 

Similar threads