Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Запретили открывать ссылки в другом окне - как? (https://javascript.ru/forum/events/36417-zapretili-otkryvat-ssylki-v-drugom-okne-kak.html)

Почемучкин 14.03.2013 16:23

Запретили открывать ссылки в другом окне - как?
 
Вот здесь http://anonym.to?http://allfreelancers.su/ средняя кнопка мыши в Firefox не работает - нельзя нажать ей на ссылку, чтобы открыть её в другом окне/табе. Работает только если нажать левой кнопкой - и тогда произойдет переход по ссылке в том же самом табе.

При этом ссылки имеют обычный формат. <a href="...">

Вопрос: Как они это сделали?

Deff 14.03.2013 16:41

Цитата:

Сообщение от Почемучкин
средняя кнопка мыши в Firefox не работает - нельзя нажать ей на ссылку

:) Зато работает правая клавиша , с меню перехода в новое окно

Почемучкин 14.03.2013 20:46

Но всё-таки интересно - как они это делают?

danik.js 14.03.2013 21:19

<a href="//google.com">Google</a>
<script>
    var link = document.querySelector('a');
    link.addEventListener('click', function(event) {
        if (event.which == 2) {
            alert('Блокируем');
            event.preventDefault();
        } else {
            alert('Не блокируем');
        }
    });
</script>

Почемучкин 16.03.2013 01:43

danik.js
В данном случае - не то.

Дело в том, что я с помощью DOM инспектора ставил выбранному линку атрибут onclick со своим значением - это не помогло.
Создал новый свой линк (с по идее чистым onclick) - то же самое, не работает средняя кнопка.

То есть оно применяется ко всем ссылкам, даже к внезапно появившимся, которых небыло в изначальной странице. И сброс атрибута onclick ничего не даёт.

Так что вопрос как они это делают, остаётся.

zilker 20.03.2013 16:44

Firefox 19.0.2, Хром 25.0.1364.172 m, Opera 12.14 - все работает. Может у вас колесико на мышке сломалось? :)
А если посмотреть со стороны js - делегирование событий. Поэтому

Цитата:

оно применяется ко всем ссылкам, даже к внезапно появившимся, которых небыло в изначальной странице. И сброс атрибута onclick ничего не даёт.
И вообще, атрибут onclick - не единственный способ назначить обработчик события.

danik.js 20.03.2013 18:56

Цитата:

Сообщение от zilker
делегирование событий

<a href="//google.com">Google</a>
<button>Добавить ссылку.</button>
<script>
    var button = document.querySelector('button');
    var reference = document.querySelector('a');
    button.addEventListener('click', function(event){
        document.body.insertBefore(document.createTextNode(' '), this);
        document.body.insertBefore(reference.cloneNode(true), this);
    });
    document.addEventListener('click', function(event){
        var target = event.target;
        if (target.nodeName.toLowerCase() == 'a' && target.href) {
            if (event.which == 2) {
                alert('Блокируем');
                event.preventDefault();
            } else {
                alert('Не блокируем');
            }
        }
    });
</script>


Часовой пояс GMT +3, время: 17:41.