Как закрыть окно браузера с помощью ZK Framework? - PullRequest
0 голосов
/ 08 апреля 2020

Мне нужно закрыть Вкладку окна браузера , обратите внимание не на виджет окна, а на вкладку окна браузера, используя ZK framework версия CE-9.0.0.

Я уже пробовал следующие сегменты кода, но не повезло:

Clients.confirmClose(null);
Executions.deactivate(page.getDesktop());
page.setComplete(true);
page.removeComponents();
page.invalidate();

Есть ли какой-либо API или способ добиться этого с помощью ZK и / или JavaScript?

Есть ли какие-либо способ получить ссылку на вкладку окна браузера, чтобы ее можно было закрыть программно, в ZK и / или JavaScript?

Обратите внимание: эта вкладка окна открывается вручную, а не JavaScript или любая другая программа.

Спасибо,

RAS

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Закрытие вкладки браузера с сервера напрямую не допускается. Но вы можете показать модальное окно, чтобы попросить пользователя закрыть вкладку браузера, например:

   <zk xmlns:ca="client/attribute">
    ...
       <window mode="modal" title="Close the browser tab">
           <button label="Yes" ca:onClick="window.close();"/>
       </window>
   </zk>

Поскольку пользователи вызывают close(), он закрывает вкладку браузера. Это может быть альтернативой. Хотя это не закрывает вкладку браузера напрямую, модальное окно покрывает всю страницу. Пользователи ничего не могут сделать, кроме как нажать «да», поэтому я думаю, что большинство пользователей просто нажимают «да», чтобы закрыть.

Я обнаружил, что это работает в Chrome 80, но не получится при Chrome 81. Так что это не очень хороший способ

0 голосов
/ 09 апреля 2020

JS для закрытия окна - window.close(), это хорошо документированный стандартный API браузера . (также ответил здесь )

Из приложения ZK (на стороне сервера) вы можете вызвать этот скрипт с помощью:

Clients.evalJavaScript("window.close()");

Однако этот API браузера имеет строгие ограничения: В современных браузерах вы можете закрыть windows только с помощью close (), которая также была открыта с помощью javascript. Таким образом, вы не можете закрыть текущее окно , если пользователь перешел туда вручную - никак иначе, кроме использования старого браузера, который я не рекомендую.

например, это что вы получите в Chrome (# 81)

log message in chrome

...