Apri nuove pagine a livello di programmazione nelle schede


98

Sto cercando di "forzare" Safari o IE7 ad aprire una nuova pagina utilizzando una nuova scheda .

A livello di codice intendo qualcosa come:

window.open('page.html','newtaborsomething');

1
Non sono sicuro di aver capito: stai sviluppando un'app che funziona con IE e desideri aprire ogni nuova pagina in una nuova scheda? O vuoi semplicemente impostare IE per aprire una nuova scheda quando fai clic su un collegamento? O stai creando un sito con più link e desideri che si aprano separatamente? Pls lo rende più chiaro.
Dungeo

Grazie di tutti i vostri commenti e risposte, so che questo non è un grosso problema e non dovrebbe essere un problema nel mio sviluppo, ma questa è una richiesta del cliente, non importante che volevo solo sapere. Il problema è che IE7 e Safari non aprono un popup con una scheda utilizzando javascript o l'attributo target, vero?
Ricardo Vega

Risposte:


63

Non puoi controllarlo direttamente, perché è un'opzione controllata dagli utenti di Internet Explorer.

L'apertura di pagine utilizzando Window.open con un nome di finestra diverso si aprirà in una nuova finestra del browser come un popup, OPPURE si aprirà in una nuova scheda, se l'utente ha configurato il browser per farlo.


Quando viene selezionata l'opzione "Consenti a Internet Explorer di decidere come aprire i popup", quali criteri utilizza Internet Explorer per prendere questa decisione?
Dead.Rabit

113

Puoi, in Firefox funziona, aggiungere l'attributo target = "_ newtab" all'ancoraggio per forzare l'apertura di una nuova scheda.

<a href="some url" target="_newtab">content of the anchor</a>

In javascript puoi usare

window.open('page.html','_newtab');

Detto questo, sono parzialmente d'accordo con Sam. Non dovresti forzare l'utente ad aprire nuove pagine o una nuova scheda senza mostrare loro un suggerimento su ciò che accadrà prima di fare clic sul collegamento.

Fammi sapere se funziona anche su altri browser (al momento non ho la possibilità di provarlo su browser diversi da Firefox).

Modifica: aggiunto riferimento per ie7 Forse questo collegamento può essere utile
http://social.msdn.microsoft.com/forums/en-US/ieextensiondevelopment/thread/951b04e4-db0d-4789-ac51-82599dc60405/


6
Grazie per questo suggerimento su Firefox, ora ho aggiornato il mio componente aggiuntivo TargetKiller per rimuovere "_newtab" e "newtab". : P
thenonhacker

1
Apprezzo molto la tua risposta, ma so che Firefox lo farà (alcuni testi, non testati da me, fanno notare che questo non è sempre vero, c'è una probabilità del 50-50 di ottenere una nuova finestra o scheda). Penso anche che questo non dovrebbe essere un problema, ma, conosci i clienti :)
Ricardo Vega

2
Potrebbe non essere il caso su tutte le build / piattaforme, ma Firefox 3.5 su Linux non ti consente di farlo più di una volta ... se hai più link target = "_ newtab" sulla tua pagina, facendo clic su uno di essi popolerà solo una singola nuova scheda ... ovvero, i clic successivi sovrascriveranno qualsiasi cosa aperta in precedenza in quella scheda. Mi fa pensare che si tratti effettivamente di aprire una scheda denominata "_newtab", piuttosto che essere una soluzione alternativa specifica del browser.
Rylee Corradini

55
Sono abbastanza sicuro che "_newtab" non abbia significato, a meno che qualcuno non abbia la documentazione contraria. Tutto quello che stai facendo è aprire una finestra il cui nome è _newtab (motivo per cui tutti i collegamenti successivi con quel target si aprono nella stessa finestra). Puoi scegliere come target "foo" o "bar" e vedere lo stesso comportamento. Gli unici target noti sono _blank, _self, _parent e _top. htmlcodetutorial.com/linking/_A_TARGET.html
Tom Lianza

43

Quelli di voi che cercano di utilizzare quanto segue:

window.open('page.html', '_newtab');

dovrebbe davvero guardare il metodo window.open.

Tutto quello che stai facendo è dire al browser di aprire una nuova finestra NOMINATA "_newtab" e caricare page.html in essa. Ogni nuova pagina che carichi verrà caricata in quella finestra. Tuttavia, se un utente ha il proprio browser impostato per aprire nuove pagine in nuove schede invece che in nuove finestre, si aprirà una scheda. Indipendentemente da ciò, utilizza lo stesso nome per la finestra o la scheda.

Se desideri che pagine diverse si aprano in finestre o schede diverse, dovrai cambiare il NOME della nuova finestra / scheda in qualcosa di diverso come:

window.open('page2.html', '_newtab2');

Ovviamente il nome per la nuova finestra / scheda potrebbe essere qualsiasi nome come pagina1, pagina2, pagina3, ecc. Invece di _newtab2.


3
conosce la sua roba. "_newtab" non è un nome riservato. "_blank" è una cosa speciale che apre un'altra finestra / scheda non specificata e senza nome - questa che puoi continuare a usare più e più volte. "_newtab" non è speciale tranne che è il nome specifico che hai dato a una nuova scheda (predefinita) o finestra, che il tuo browser continua ad aggiornare con qualsiasi URL tu invii.
BradChesney79

14

Sta all'utente se desidera utilizzare nuove schede o nuove finestre, non è compito dello sviluppatore modificare questo comportamento. Non credo che tu possa farlo.

Pet peeve del mio - odio quando i siti mi costringono ad aprirmi in una nuova finestra / scheda - sono abbastanza capace di prendere quella decisione per me stesso. Soprattutto quando lo fanno in javascript, è davvero inutile.


1
+1 a Sam: l'apertura di nuove pagine in schede o finestre è una scelta specifica del browser (e dell'utente). In generale, odio quando un sito apre una nuova finestra.
Richard Ev

Oltre a questo: nella definizione "strict", non esiste un attributo valido "target" per non infastidire l'utente. Provalo: validator.w3.org
guerda

4
Mi piace aprire gruppi di schede a casa, quindi in questo caso sono l'utente. Solo un promemoria che ci sono eccezioni.
Mark Essel

7
anche se sono d'accordo che può essere fastidioso quando i siti forzano le azioni, penso che sia un po 'inutile affermare semplicemente che non dovresti fare qualcosa senza considerare i motivi per cui qualcuno potrebbe volerlo fare. È comune che i siti aprano elementi in nuove schede, in particolare collegamenti a siti esterni o quando non è utile sostituire una pagina attiva con nuovi contenuti, quindi non si tratta di un comportamento del tutto inaspettato. Suggerirei anche che questa non è davvero una risposta alla domanda e sarebbe stata più adatta come commento al post originale.
andyface

1
Non sono d'accordo, supponendo che un valore predefinito per l'utente sia una scelta di design per applicazione web e non per browser. Il browser può sottoscrivere un valore predefinito in cui l'applicazione non lo fa. Inoltre, se i browser forniscono all'utente un modo per sovrascrivere i valori predefiniti dell'applicazione / i valori predefiniti del browser, allora è il migliore di entrambi i mondi. Utente> Applicazione> Browser.
Derek Litz

8

Hai già provato come

var open_link = window.open('','_blank');
open_link.location="somepage.html";

Questo cross browser è compatibile? Sembra funzionare in IE8, preoccupato per le versioni future o altri browser.
n00b

Sì .. è compatibile per cross browser. Non ho avuto problemi con esso fino ad ora: D
Thurein Soe

5

Ho scoperto in Chrome,

window.open('page.html','_newtab')

funzionerà solo una volta.

Puoi usare:

window.open(ct.getNewHref(),'_newtab' + Math.floor(Math.random()*999999));

Per aprire più nuove schede.


10
questo perché in Chrome, _newtab è solo un nome e lo richiedi per aprire la pagina nella scheda denominata "_newtab"
w00t

3

Il codice che uso con jQuery:

$("a.btn_external").click(function() {
    url_to_open = $(this).attr("href");
    window.open(url_to_open, '_blank');
    return false;
});

Questo è utile per distinguere tra gli eventi di clic di un genitore in un bambino. Utilizzando questo metodo, non si attiva l'evento clic del genitore.


8
Perché non utilizzare semplicemente il vecchio HTML normale? <a href="page.html" target="_blank">foo</a>
pixelastic

1
@pixelastic "Utilizzando questo metodo, non attivi l'evento clic del genitore."
Michael Blackburn,

3

Funziona al 100%

window.open('http://www.google.com/','_newtab' + Date.now());


0

Se lo desideri, puoi utilizzare questo metodo, che è un po 'hacky, ma offrirebbe la funzionalità desiderata:

jQuery('<a/>', {
    id: 'foo',
    href: 'http://google.com',
    title: 'Become a Googler',
    rel: 'external',
    text: 'Go to Google!',
    target:'_blank',
    style:'display:none;'
}).appendTo('#mySelector');

$('#foo').click()

puoi fornire un jsfiddle?
Xenology

-2

Questo potrebbe funzionare se puoi chiamare un file batch (io uso php con XP sp2 e IE8 ... puoi provare IE7, non so). Utilizzare quanto segue (o simile) nel file .bat per aprire Windows: Start "" C: \ Progra ~ 1 \ Intern ~ 1 \ iexplore "http://www.site.com". Non c'è spazio tra le virgolette e C: \ Progr ... ecc. Ad un certo punto, questo potrebbe iniziare ad aprire nuove finestre (ad esempio, target = "_ blank") piuttosto che nuove schede, ma funziona fino a un certo punto; non ampiamente testato. Per utilizzarlo in un normale file batch (CMD.exe), probabilmente è necessario disporre di una finestra già aperta. Sto solo condividendo qualcosa in cui sono incappato. MODIFICATO per chiarimenti.


-7
<a href="http://www.google.com/" target="_self">New Tab Example</a>

Funziona in IE7.

Saluti,

Glenn


8
Glenn questo è l'opposto di ciò che chiedeva l'OP. _self aprirà il documento nella stessa finestra o frame.
travega

Inoltre non è il modo per aprire in modo programmatico. La sorpresa è come guadagna +10 rep (+ 3 / -10) con questa risposta.
vusan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.