2009-10-15 13 views
113

Gdy użytkownik kliknie na łącze, muszę zaktualizować pole w bazie danych, a następnie otworzyć żądany link w nowym oknie. Aktualizacja nie stanowi problemu, ale nie wiem, jak otworzyć nowe okno bez konieczności klikania innego hiperłącza.Jak zasymulować target = "_ blank" w JavaScript

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

Hm? 'target =" _ top "' nie otwiera się w nowym oknie - 'target =" _ blank "' does. – Tomalak

+0

Jeśli łącze jest już otwierane w nowym oknie (ze względu na target = "_ blank"), a moduł obsługi kliknięć javascript już aktualizuje bazę danych, dlaczego musiałbyś w ogóle otworzyć nowe okno z Javascriptem? –

Odpowiedz

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

Drugi parametr jest opcjonalny i jest nazwą okna docelowego.

+1

'window.open' robi to, co' target = "_ blank" 'does - otwiera adres URL w nowym oknie. – ceejayoz

+2

tak. drugim argumentem dla window.open() jest "nazwa", którą chcesz nadać oknu, podobnie jak ustawienie celu na łączu. https://developer.mozilla.org/En/DOM:window.open –

+1

Och, rozumiem. window.open jest blokowany przez blokowanie wyskakujących okienek Firefox, ale target = "_ blank" nie jest. Czy powinienem po prostu poprosić klienta o włączenie wyskakujących okienek z ich własnej strony internetowej? –

2

Można wyodrębnić href z tagiem:

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

wiem, że to jest zrobione i załatwione wiele, ale oto co używam, aby rozwiązać problem w mojej aplikacji.

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

zasadzie to, co się tu dzieje to biegnę czek jeśli link zawiera atrybut target=_blank. Jeśli nie, zatrzymuje połączenie, uruchamia je, ustawia je do otwarcia w nowym oknie, a następnie programowo klika.

Można pójść o krok dalej i pominąć zatrzymanie oryginalnego kliknięcie (i uczynić swój kod o wiele bardziej zwarte), próbując w ten sposób:

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

Jeśli uzywasz jQuery streszczenie dala realizacja dodawania atrybutu cross-browser, należy użyć tego zamiast e.target.setAttribute("target", "_blank"):

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

może trzeba przerobić go aby pasowały do ​​dokładnego przypadków użycia, ale oto jak ja porysowana własne swędzenie.

Oto z tego w akcji, z którymi możesz zadzierać.

(Link w jsfiddle wraca do tej dyskusji .. nie potrzebują nowej karty :))

6

ja osobiście wolę za pomocą następującego kodu jeśli jest to dla pojedynczego łącza. W przeciwnym razie prawdopodobnie najlepiej jest utworzyć funkcję o podobnym kodzie.

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

Zacząłem używać tego do ominięcia surowego testu XHTML W3C.

+0

Myślę, że wbudowany JavaScript jest bardziej bałagan niż dodanie "niestandardowego" atrybutu, który działa wszędzie. –

+0

@MattiVirkkunen w niektórych sytuacjach jest jedynym rozwiązaniem –

+0

@Claudiu: Jeśli znajdziesz się w tak absurdalnej sytuacji, powinieneś raczej naprawić przyczynę niż otaczać go. –

5

Tak to robię z jQuery. Mam dla każdego linku klasę, którą chcę otworzyć w nowym oknie.

$(function(){ 

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

To może pomóc

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

To powinna być akceptowana odpowiedź. – ebilgin

+0

IE11: "Błąd JavaScript w czasie wykonywania: nieprawidłowa akcja dla obiektu" –

+4

Ta odpowiedź może zostać poprawiona poprzez dodanie opisu tego, co się dzieje –

1

To może pomóc otwartej całej stronie linki:

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

Otworzy co <a href="" class="myClass"></a> przedmioty linku do innej zakładki jak byś miał kliknąłem każdy.

Wystarczy wkleić go do konsoli przeglądarki. jQuery framework required

Powiązane problemy