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


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

<body onLoad="document.getElementById('redirect').click">
<a href="http://www.mydomain.com?ReportID=1" id="redirect" target="_blank">Report</a>
</body>
7   126   2009-10-15 21:51:06

7 ответов:

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

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

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

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);

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

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

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

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

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

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

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

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

здесь демо из него в действии для вас, чтобы возиться.

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

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

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

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

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

$(function(){

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

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

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

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

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

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

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