здравствуйте дорогие форумчане, тут у меня вопрос возник, а каким образом можно вывести кнопку по верх браузера?
svelte
svelte
извиняюсь, тяжело донести свою мысль до кого то.Чиво?
Что мешает сделать кнопку внутри этого самого браузера с callback'ом, который бы отправлял запрос назад на клиент и закрывал этот самый браузер?извиняюсь, тяжело донести свою мысль до кого то.
я создаю браузер через - mp.browsers.new с ссылкой на сайт форума, могу ли я поверх этого браузера вывести кнопку "выйти" для удаления созданного браузера?
страница не моя, то есть изменить сам сайт возможности нетуЧто мешает сделать кнопку внутри этого самого браузера с callback'ом, который бы отправлял запрос назад на клиент и закрывал этот самый браузер?
Браузер - страница, выведите на странице кнопку, а её обработчик заставьте посылать запрос в клиент (mp.trigger), на клиенте получайте этот ивент и закрывайте браузер - вопрос ведь решается за 5 секунд. Либо я Вас не понимаю, либо чего.
А сервер - твой?страница не моя, то есть изменить сам сайт возможности нету
спасибо, сервер мой, сейчас и реализован первый вариант.А сервер - твой?
Если твой, то у тебя должен быть доступ и к коду клиента, и к коду страницы.
В крайнем случае можно на клиенте, например, создать переменную, обозначающую, что мы на странице, которую можно закрыть, потом повесит listener на ESC и сверяться с переменной. Если кнопка нажата, а переменная в нужном нам положении - закрыть открытую страницу, а переменную сбросить. Но это уже скорее костыль, нежели нормальная работа.
Если не твой, то твой вопрос некорректен изначально и должен звучать так:
"Я играю на чужом сервере, хочу иметь возможность закрывать CEF по кнопке, как сделать?"
Но в таком случае мы просто ответим, что никак, потому что тут занимаются не взломом, а программированием.
В качестве идеи, не знаю насчет работоспособности: можно попробовать вывести чужой сайт на своей странице в iframe, на свою же страницу вывести кнопку, на которую уже навесить коллбэк и делать с iframe все, что нужно.спасибо, сервер мой, сейчас и реализован первый вариант.
в принципе ответ понятен, еще раз спасибо!
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); // теперь фон кнопки будет черный.
});
Простите, я эти вот ваши фронтендерские магии не изучалНе надо никаких танцев с бубном.
Нужен только доступ к объекту браузера, который создан.
А какая там открыта страница — существенной разницы нет.
В 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); // теперь фон кнопки будет черный. });
Идея с esc больше нравится, ибо современный пользователь потянется скорее к этой клавише чем будет в куче информации на странице искать кнопку закрыть/назад, далее вести туда мышкой и после нажимать на кнопку. Такой вариант тоже неплохой и реализуется достаточно легко:Простите, я эти вот ваши фронтендерские магии не изучал
let browserState = [null, false] // первое значение отвечает за наличие браузера в массиве, есть ли он, второе значение за то, можно ли закрыть этот браузер нажатием
mp.keys.bind(keyCode, true, function() {
if (browserState[0] && browserState[1]) {
browserState[0].destroy();
}
});
Да, но я бы чуть-чуть подправил твой код, вот так:Идея с esc больше нравится, ибо современный пользователь потянется скорее к этой клавише чем будет в куче информации на странице искать кнопку закрыть/назад, далее вести туда мышкой и после нажимать на кнопку. Такой вариант тоже неплохой и реализуется достаточно легко:
JavaScript:let browserState = [null, false] // первое значение отвечает за наличие браузера в массиве, есть ли он, второе значение за то, можно ли закрыть этот браузер нажатием mp.keys.bind(keyCode, true, function() { if (browserState[0] && browserState[1]) { browserState[0].destroy(); } });
Насколько я помню то такое должно без проблем работать.
let browserState = [null, false]; // первое значение отвечает за наличие браузера в массиве, есть ли он, второе значение за то, можно ли закрыть этот браузер нажатием
mp.keys.bind(keyCode, true, function()
{
if (!browserState[0] || !browserState[1]) return;
browserState[0].destroy();
browserState = [null, false];
});
|| - или, значит, если есть объект ИЛИ его можно закрыть, тогда он закончит выполнения функции. Тогда, если есть объект, но будет falsy, то все равно попытается закрыть CEFДа, но я бы чуть-чуть подправил твой код, вот так:
JavaScript:let browserState = [null, false]; // первое значение отвечает за наличие браузера в массиве, есть ли он, второе значение за то, можно ли закрыть этот браузер нажатием mp.keys.bind(keyCode, true, function() { if (!browserState[0] || !browserState[1]) return; browserState[0].destroy(); browserState = [null, false]; });
Я использую оба варианта.Идея с esc больше нравится, ибо современный пользователь потянется скорее к этой клавише чем будет в куче информации на странице искать кнопку закрыть/назад, далее вести туда мышкой и после нажимать на кнопку. Такой вариант тоже неплохой и реализуется достаточно легко:
JavaScript:let browserState = [null, false] // первое значение отвечает за наличие браузера в массиве, есть ли он, второе значение за то, можно ли закрыть этот браузер нажатием mp.keys.bind(keyCode, true, function() { if (browserState[0] && browserState[1]) { browserState[0].destroy(); } });
Насколько я помню то такое должно без проблем работать.
Шутки про тестеров, как никогда актуальныЯ использую оба варианта.
Так как есть те, кто даже не догадываются, что на ESC можно закрыть меню и начинают строчить админам, что у них ничего не закрывается ;D
Поэтому, лучше перестраховаться и реализовать обе версии.
Почему?|| - или, значит, если есть объект ИЛИ его можно закрыть, тогда он закончит выполнения функции. Тогда, если есть объект, но будет falsy, то все равно попытается закрыть CEF
let browser = mp.browsers.new("");
mp.keys.bind(keyCode, true, () => {
if (!browser) return;
if (!mp.borwsers.exists(browser)) return;
browser.destroy();
});
Насколько я понимаю, человеку нужно контролировать возможность закрытия, а не в любой момент давать такую возможность.
JavaScript:let browser = mp.browsers.new(""); mp.keys.bind(keyCode, true, () => { if (!browser) return; if (!mp.borwsers.exists(browser)) return; browser.destroy(); });
Почему?
Если browserState[0] (объект браузера) не будет равнятся чему-либо, кроме null, то на след.проверку мы не пройдём.
Если browserState[1] будет не true, то дальше мы тоже не пройдём.
Таким образом сквозь проверку пройдут ТОЛЬКо в случае, если browserState[0] != null И browserState[1] == true.
Я, конечно, могу тупить, но здесь вроде как всё хорошо.
|| - проверка "или", которая делается и прерывается, как только что-то пошло не по плану.
| - та же проверка "или", но не прервётся, если что-то пошло не по плану. Если бы в этом примере я использовал именно этот знак, то получилась бы ошибка.
let browserState = [null, false]; // первое значение отвечает за наличие браузера в массиве, есть ли он, второе значение за то, можно ли закрыть этот браузер нажатием
function Test() {
console.log("entry");
if (!browserState[0] || !browserState[1]) return;
console.log("delete");
browserState = [null, false];
}
Test();
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?