Пользователь
0,1
рейтинг
29 июля 2013 в 01:57

Разработка → Незакрываемая вкладка в Chrome


Не совсем даже баг, скорее недоработка интерфейса позволяет создать страницу, которую нельзя будет закрыть в Google Chrome.
Пруф: wifix.ru/onbeforeunload/test.html

В приведенном примере предупреждение будет показано только десять раз, но ничего не мешает показывать его бесконечно.

ohm смог воспроизвести проблему в IE 10.

azproduction написал:

В Firefox, Safari есть подобная нерешенная проблема: bugzilla.mozilla.org/show_bug.cgi?id=705617

В обработчике beforeunload делаем синхронный XHR на сервер, который держит соединение, но никогда не отечает. Вкладка никогда не закроется сколько бы в нее ни тыкали. В Chrome эта проблема решена — при втором клике на [x] вкладка закроется.

Код примера




Так же в Chrome есть особенность при показе модальных окон. Окно с алертом является глобальным для всех вкладок.
В результате нельзя переключиться на другую вкладку не закрыв модальное окно.
Пример wifix.ru/onbeforeunload/page.html

В сочетании с первой проблемой это позволяет создать ощутимый дискомфорт:
Осторожно скример: _ttp://wifix.ru/onbeforeunload/screamer.html
Павел Жовнер @zhovner
карма
163,0
рейтинг 0,1
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (100)

  • +16
    Натыкался уже на подобные страницы только с рекламой — палец на энтере задачу решает, но это конечно не дело
    • +1
      В общем, довольно известный баг, тоже не раз видел его эксплуатацию.

      Интересно, есть ли аналогичные вещи в иных браузерах.
    • +23
      Оставлял сообщение в баг-трекере хромиума, но мне не поверили. Прошёл год =/
      • +7
        А вот три года прошло: issue 49530, причём баг в открытом состоянии. Не могут устанавливать расширения все, у кого системный диск динамический, например является программным зеркалом.

        Давлюсь едой, если в зомбоящике вдруг реклама Хрома.
    • +1
      На сайтах с «рекламой» обычно есть jQuery, помогает в консоли JS ввести jQuery('html').empty() не знаю всегда или нет но мне помогало.
      • +20
        Можно и без jQuery

        document.body.innerHTML = ""
        
  • –20
    мак, 28.0.1500.71
    через где-то 10 нажатий «закрыть» — все закрывается.
    Странно что на всех таких штуках после 2 раз не появляется галочка «не показывать»
    • +7
      Закройте вот это wifix.ru/onbeforeunload/screamer.html
      • +1
        body в инспекторе удаляете и всё всегда закрывается.
        • +13
          Можно еще процесс вкладки убить в таск менеджере хрома, но это ведь не нормально.
          • –14
            Не нормально это то, что делает та вкладка. Когда комп заражается вирусом с ним тоже борются всеми возможными способами. Так что и не нормально, так это вирусы.
            • +3
              Браузеры предназначены для открытия произвольных страниц (т.е. для выполнения произвольного программного кода), поэтому никакая страница не должна иметь возможности выводить из строя стандартные действия над ней (такие, как закрытие этой страницы) или причинять вред компьютеру пользователя.
              • –1
                Скажите это Windows. Я бы тоже хотел, что бы не одна программа которую я установлю не могла навредить моему компьютеру. Но увы…

                П.С.
                Операционные системы предназначенны для установки произвольных программ (т.е. для выполнения произвольного программного кода)… Ну вы поняли.
                • +2
                  Скажите это Windows. Я бы тоже хотел, что бы не одна программа которую я установлю не могла навредить моему компьютеру. Но увы…

                  Ограничьте прикладные программы в операционной системе настолько, насколько браузеры ограничивают свои и Вы получите то, что хотите.

                  Операционные системы предназначенны для установки произвольных программ (т.е. для выполнения произвольного программного кода)… Ну вы поняли.

                  Операционные системы не предназначены для установки произвольных программ, т.к. своим программам они предоставляют возможности, способные нанести вред (например, стереть саму операционную систему). Браузеры таких возможностей своим программам не предоставляют.
      • 0
        Открываешь в инструметах разработчика просмотр дерева элементов, и удаляешь, например, body.
        (Извеняюсь, написал комментарий, не обновив страницу)
        • 0
          Выход для сколько-нибудь сведущих в деле, но совсем не вариант для массового пользователя.
      • +2
        Я правильно понимаю по названию, что это рожа на весь экран с криком? Если так, то предупреждать надо ;-)
        • +3
          не. там веселая туса)
      • +1
        А у меня по этой ссылке ничего не появляется, кроме ярлычка вкладки, 2-3 раза кликаю по нему, вкладка закрывается.

        Win7 x64,
        Chorme Версия 28.0.1500.72 m
      • +1
        С лёгкостью закрылось:
        Сначала выдало предупреждение, хотите ли уйти, а потом и вовсе закрылась вкладка. Правда хром — 30.0.1579.0 canary

        При чём все выше перечисленные ссылки закрываются.
      • 0
        Вот простой букмарклет:

        javascript:document.body.innerHTML = ""; window.close();
        
      • 0
        Ентер зажал на диалоге и все само закрылось через секунду.
      • 0
        Мак ОС Х, Яндекс.Браузер. Закрываю вкладку, жму «уйти», ставлю галочку «Не спрашивать больше для этой страницы», опять жму уйти, и всё ок, вкладки нет.
        Хрома под рукой нет, под ним действительно не закрывается?
    • +12
      Пост не читай @ скорее в комментах покажи, какие вокруг все дурачки
    • –9
      Под маком Cmd+Q закроет все что угодно (-;
      • +7
        P.S. Ан нет, в этот раз даже cmd+Q не спасает. Обычно его хватало для случаев когда попапы бесконтрольно плодятся и закрываться не хотят, но не в этот раз.
      • 0
        вы пробовали конкретно это wifix.ru/onbeforeunload/screamer.html ???

        ЗЫ: извиняюсь… успели вперед меня… =)
      • +5
        kill -9
        

        Вот что помогает ;)
        • –2
          sudo kill -9
        • 0
          да даже xkill замечательно помогает
        • 0
          killall -9 Chrome.app
          
    • +1
      У фокса появляется уже на втором запросе.
  • +12
    Интересно новая Opera теперь тоже с фирменными отличиями Google Chrome?
    • +9
      * вспоминает былое выделение текста в опере и жесты и грустно пожимает плечами *
      • +2
        Вообще именно этот баг не унаследован. Хоть что то приятное.
        • 0
          Да, повезло, Опериум закрывает нормально.
      • 0
        По крайней мере жесты уже вернули.
    • +4
      Opera 16 Next — все страницы закрываются.
      • 0
        Спасибо, я вчера на 15 версии проверил, то же не унаследовано.
  • +4
    Фаер в этом деле шарит)
  • +1
    В IE10 такой же эффект как и в Хроме. Фиг закроешь.
    • 0
      F12 → Кнопка правки (ALT+E) → стираем всё и ещё раз жмём. Теперь можно закрыть вкладку.
      С окном ещё прокатывает если нажать на крестик самого окна в какой-то момент выскакивания.
  • +9
    Shift+Esc (Инструменты — Диспетчер задач) выбираете вкладку, завершить процесс…

    Несколько лет уже на рекламных сайтах используют…
    • 0
      Лишнюю вкладку прихватить может.
  • +11
    В Chrome Canary 30.0.1579.0 закрывается с первого раза. Значит скоро будет и в стабильной ветке.
  • +2
    Можно просто в строке адреса что-нибудь ввести.

    А вообще, неприятный баг.
    • 0
      Вы пробовали? Сообщение выводится всё равно. Событие onbeforeunload срабатывает же.
      • 0
        в сафари срабатывает!
        • 0
          Проверил в Сафари под Windows. Ввожу в адресной строке http://wifix.ru/onbeforeunload/test.html, затем ввожу http://habrahabr.ru. Окно‑сообщение выводится 10 раз.
        • 0
          Возможно баг в сафари, раз событие не сработало. А в каком случае у вас сработало? Когда предупреждение показалось, а вы вбили в адресную другой url?
          • 0
            нет, когда просто страница открыта, без предупреждения…

            PS: прошу прощения! забыл указать что у меня Safari 7.0
      • 0
        У меня в хроме работает. Ubuntu 12.04, Google Chrome Version 28.0.1500.71.
      • 0
        Пробовал, потому и написал. Работает, сообщения нет. Chrome Stable, win8
        • +1
          Вах! Эврика!

          Если вводить незнакомый браузеру URL или абракадабру, сообщение появляется.

          А если ввести знакомое («ha»), то может и не появиться. Но не для всех URL'ов и зависит от того, немедленно давишь Enter или позволяешь Хрому на глазах что-то там переделать в выпадающем списке.

          Хром версии 28.0.1500.72 m.
  • +1
    Окно с алертом является глобальным для всех вкладок.
    Хуже. Является глобальным для всех окон Хрома (кроме Диспетчера задач).

    Например, в IE действительно сообщение является глобальным только для вкладок одного окна.
    • +1
      Действительно, под виндовсом попап блокирует все его окна.
  • +2
    window.onbeforeunload = function(env){//
    //
    
    	if(1)
    	{//
    		
    		alert ("Warning Message");//
    		
    		return "Warning Message";//
    		
    	}//
    	
    };//
    
    Это необходимо для незакрывания вкладки, или просто следы творческих мук?
    • –1
      Это вы ещё квадрата Малевича на яваскрипте не видели )
  • –4
    Ну в Хроме закрыть просто. Вызываем диспетчер задач и убиваем процесс
    • –2
      Извиняюсь, сразу не заметил, что этот совет был чуть выше
  • +19
    firefox шикарно решили проблему: После 2-ого повторного сообщения появляется галочка с предложением запретить последующие сообщения

    image
    • 0
      В Яндекс браузере на том же weblit со второго сообщения присутствует точно такая же галочка. Странно, что в самом Хроме такая галочка есть в сообщениях, вызванных через alert(), но её нет при закрытии страницы.
    • 0
      Вообще говоря, я и в Хроме такую штуку видел. Когда, например, картинки массово в пост вставлял — вылетало такое предупреждение. Интересно, почему это отключили?
      • 0
        наверное просто не работает при закрытии страницы.
      • 0
        Наверное, дело в том, что каждое сообщение выдается отдельным фреймом.
  • +2
    Safari 6.0.5 тоже самое
    • 0
      Аналогично, в Сафари попадал пару раз на рекламные сайты с «ваш компьютер заражён» на предупреждении, решалось именно что отключением яваскрипта.
  • +3
    Да, Firefox нормально решает эту проблему, плюс ему.
  • 0
    Скример не совсем злостный, позволяет переключиться на другую вкладку. По тексту статьи решил, что в нем оба бага совмещены.
    Убил его, через Ctrl+F4 и трехсекундное зажатие Enter'а.

    З.Ы. Проверил в мобильных браузерах (iOS). Не работает ни в Chrome, ни в Safari.
  • 0
    Ну все, ждите, скоро на всех экранах страны! :)
  • +1
    Кажется, в тему. Есть еще такой ресурс: themostuselesssiteever.com =)
    Попробуйте после открытия Ctrl + Shift + T.
    • 0
      Стало интересно, как оно работает?)
      • 0
        Уличная магия
      • 0
        (function (w, FF) {
            w.top.opener=null;
            w.open(document.URL.replace(/#+$/,'') + '#', '_self');
            w.close();
            if (FF && !w.closed) {
                alert("In Firefox The Most Useless Site Ever becomes even more useless! You need to open about:config and set dom.allow_scripts_to_close_windows = true to use it in this browser.");
            }
        })(window, (document.getBoxObjectFor != null || window.mozInnerScreenX != null));
        
    • 0
      И что же такого необычного происходит после нажатия Ctrl + Shift + T?
      • 0
        Вру. Удалено. Подумал что это горячая клавиша для открытия новой вкладки, а это открывается из истории. Магии никакой нет
        • 0
          Ну, это и есть уличная магия — когда ее нет
      • 0
        Вообще, страница сразу закрывается. Это приводит к невозможности восстановить закрытую вкладку, что кажется небольшим издевательством над «нормальной» работой браузера.
        Например, если открыть в текущем окне, то будет проблематично вернуться на исходную позицию.
        • 0
          Спасибо, теперь понял. Ломается не сама комбинация клавиш, а та вкладка, из которой перешли по данной ссылке, навсегда исчезает. Я-то, как привык, открыл ссылку в режиме инкогнито, и не заметил никаких вредных эффектов…
    • 0
      Интересный эффект наблюдается, если открыть эту вкладку, как единственную, при условии, что в настройках установлено восстанавливать вкладки, которые были открыты при закрытии браузера (либо если этот сайт установлен домашней страницей). Браузер закрывается сразу после запуска и, если в случае с восстановлением последних закрытых вкладок достаточно успеть нажать Ctrl+T, то при установке домашней страницей без правки конфигов или файла hosts не обойтись.
      Проверено в Firefox 22.0 и в Google Chrome.
      • 0
        LOL. Спасибо! Интересный эксперимент.
      • 0
        А если хрому передать другой адрес в командной строке, он его успеет открыть или тоже сразу закроется?
        • 0
          Открывает вместо домашней и ведет себя как ни в чем не бывало.
  • –2
    2-3 сек зажатого Enter решает проблему повсеместно в браузерах на WebKit, FireFox дает отлуп уже на 2-ом вызове (как уже писали выше).
    Не очень-то и беда. (Хотя «всякие» несколько раз беспокоили — мол вирус)
  • 0
    Хорошо иметь noscript, робяты! ;-)
  • +3
    В Firefox, Safari есть подобная нерешенная проблема: bugzilla.mozilla.org/show_bug.cgi?id=705617

    В обработчике beforeunload делаем синхронный XHR на сервер, который держит соединение, но никогда не отечает. Вкладка никогда не закроется сколько бы в нее ни тыкали. В Chrome эта проблема решена — при втором клике на [x] вкладка закроется.

    Код примера
  • 0
    Пока не выключил Better Pop Up Blocker, и не увидел проблемы с закрытием :)
  • 0
    еще один способ отключить javascript — открываем «Инстрменты разработчика» (Ctrl+Shift+I), переходим в settings (нижний правый угол, шестеренка), ставим галку Disable JavaScript, и закрываем вкладку
  • 0
    Chrome. Leave on this page -> Shift + ESC -> kill process
    И не паримся со страницей.
  • 0
    God grant me the serenity to accept the tabs I cannot close, the courage to close the ones I can, and the strength to know the difference.
  • 0
    F12 — настройки — отключить JavaScript — закрыть окно
    • 0
      СПАСИБО, ВЫ МОЙ СПАСИТЕЛЬ!
    • 0
      Я не знаю что у меня произошло, но у меня этот пункт какое-то время назад стал серым, но сам JS работает.
  • 0
    Ctrl+L и вводим:
    javascript:document.write('');window.close();
  • 0
    Натыкался на такую рекламу:
    f12 -> удалил весь код -> profit
  • 0
    Maxthon 4, закрылись оба окна с первого раза без проблем и сообщений.
  • 0
    Windows 7 Chrome 33.0.1750.154 m — закрылось с первого раза. И года не прошло :)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.