Как имитировать target = "_ blank" в JavaScript

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

<body onLoad="document.getElementById('redirect').click">
<a href="#" onclick="location.href='http://www.mydomain.com?ReportID=1'; return false;" id="redirect" target="_blank">Report</a>
</body>

Ответ 1

<script>
    window.open('http://www.example.com?ReportID=1', '_blank');
</script>

Второй параметр является необязательным и является именем целевого окна.

Ответ 2

Это может помочь

var link = document.createElementNS("http://www.w3.org/1999/xhtml", "a");
    link.href = 'http://www.google.com';
    link.target = '_blank';
    var event = new MouseEvent('click', {
        'view': window,
        'bubbles': false,
        'cancelable': true
    });
    link.dispatchEvent(event);

Ответ 3

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

if (!e.target.hasAttribute("target")) {
    e.preventDefault();     
    e.target.setAttribute("target", "_blank");
    e.target.click();
    return;
}

В основном, что происходит здесь, я запускаю проверку, если ссылка имеет атрибут target=_blank. Если это не так, он прекращает связь с запуском, устанавливает его для открытия в новом окне, а затем программным образом нажимает на него.

Вы можете сделать еще один шаг и пропустить остановку исходного клика (и сделать код более компактным), попробовав это:

if (!e.target.hasAttribute("target")) {
    e.target.setAttribute("target", "_blank");
}

Если вы используете jQuery для абстрагирования реализации добавления кросс-браузера атрибута, вы должны использовать его вместо e.target.setAttribute("target", "_blank"):

    jQuery(event.target).attr("target", "_blank")

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

Здесь демонстрационная версия в действии, с которой вы можете столкнуться.

(Ссылка в jsfiddle возвращается к этому обсуждению.. нет необходимости в новой вкладке:))

Ответ 4

Я лично предпочитаю использовать следующий код, если он предназначен для одной ссылки. В противном случае, лучше всего, если вы создадите функцию с похожим кодом.

onclick="this.target='_blank';"

Я начал использовать это, чтобы обойти строгий тест W3C XHTML.

Ответ 5

Вот как я это делаю с помощью jQuery. У меня есть класс для каждой ссылки, которую я хочу открыть в новом окне.

$(function(){

    $(".external").click(function(e) {
        e.preventDefault();
        window.open(this.href);
    });
});

Ответ 6

Вы можете извлечь href из тега:

window.open(document.getElementById('redirect').href);

Ответ 7

Это может помочь вам открыть все ссылки на страницы:

$(".myClass").each(
     function(i,e){
        window.open(e, '_blank');
     }
);

Он откроет все элементы ссылки <a href="" class="myClass"></a> на другую вкладку, как вы бы нажали на каждую из них.

Вам нужно только вставить его в консоль браузера. Требуется фреймворк jQuery