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

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

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,009
1,741
211
28
Что мешает сделать кнопку внутри этого самого браузера с callback'ом, который бы отправлял запрос назад на клиент и закрывал этот самый браузер?
Браузер - страница, выведите на странице кнопку, а её обработчик заставьте посылать запрос в клиент (mp.trigger), на клиенте получайте этот ивент и закрывайте браузер - вопрос ведь решается за 5 секунд. Либо я Вас не понимаю, либо чего.
 

yaneagentfib

Новый участник
13 Июн 2023
47
4
43
страница не моя, то есть изменить сам сайт возможности нету
 

XDeveluxe

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

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

yaneagentfib

Новый участник
13 Июн 2023
47
4
43
спасибо, сервер мой, сейчас и реализован первый вариант.
в принципе ответ понятен, еще раз спасибо!
 
Реакции: 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,009
1,741
211
28
Простите, я эти вот ваши фронтендерские магии не изучал
 
Реакции: kirillzver и youngBeaver

youngBeaver

Покинул форум.
BackEnd developer
24 Янв 2023
1,202
469
171
Простите, я эти вот ваши фронтендерские магии не изучал
Идея с 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,009
1,741
211
28
Да, но я бы чуть-чуть подправил твой код, вот так:
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
|| - или, значит, если есть объект ИЛИ его можно закрыть, тогда он закончит выполнения функции. Тогда, если есть объект, но будет falsy, то все равно попытается закрыть CEF
 

kirillzver

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

youngBeaver

Покинул форум.
BackEnd developer
24 Янв 2023
1,202
469
171
Шутки про тестеров, как никогда актуальны
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
3,009
1,741
211
28
Почему?
Если 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,009
1,741
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
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
3,009
1,741
211
28


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