self.close() не работает с событием keycode

#javascript #jquery

#javascript #jquery

Вопрос:

я пытаюсь закрыть окно браузера с помощью клавиши ESC, но не знаю, почему self.close dos не работает.

это то, что я делаю (я пытаюсь использовать document вместо body , но ничего не меняется):

     $('body').keydown(function(e) {
          if(e.keyCode == 27){
                alert(e.keyCode); // alert work fine ( 27 ) 
                self.close();
          }
    });
 

чего мне не хватает?

Редактировать:

выполнение этой работы нормально:

     $("#closeWindow").click(function(){
        self.close();
    });
 

Спасибо.

Комментарии:

1. JavaScript может закрывать только те окна, которые были открыты JavaScript.

2. почему, если я нажимаю на кнопку, самозакрывается работа?

3. На что self ссылается? Внимание к области видимости этой переменной.

Ответ №1:

Поскольку ваше предупреждение работает, я предполагаю, что self.close() не работает по соображениям безопасности.

Этот код является взломом, позволяющим обойти эту меру безопасности:

 window.open('', '_self', '');
window.close();
 

Ответ №2:

Окна могут быть закрыты только с помощью javascript, если они были открыты с помощью javascript. Если окно, с которым вы работаете, не было открыто с помощью кода, вы не сможете закрыть его с помощью кода. Смотрите Описание раздела здесь: https://developer.mozilla.org/en/DOM/window.close В Интернете есть несколько старых хаков для решения этой проблемы, но большинство из них устарели в более поздних версиях браузеров.

Кроме того, вы захотите добавить keydown событие document , а не элемент body , и когда вы используете self.close() , вам, вероятно, лучше использовать window.close() , чтобы избежать путаницы с областью видимости — вы хотите, чтобы окно закрывалось, поэтому нет никакого вреда в том, чтобы быть явным.

Ответ №3:

Попробуйте $(document) вместо этого. Нет объекта ‘body’, к которому вы могли бы подключиться.