2012-11-16 10 views
9

Quando un utente aggiunge un articolo al nostro carrello acquisti apre il nostro negozio in una nuova scheda. Diversi siti Web abbastanza stranamente.controlla se una scheda del browser è già aperta quindi non creo schede aggiuntive

Vorrei verificare se la scheda è già aperta e quindi ripopolarlo con il secondo elemento invece di aprire un'altra scheda con il carrello aggiornato.

C'è un modo per controllare questo con js? Immagino di poter rintracciare che abbiamo aperto la scheda ma non vedo come posso confermare che non è stato chiuso nel tempo tra l'aggiunta di articoli al carrello senza fare alcune richieste ajax che eseguono il ping di entrambe le pagine ecc. Che sembra eccessivo.

Così semplicemente come si controlla se una scheda del browser è già aperta?

cura con una soluzione: Primo:

var tab = window.open('http://google.com','MyTab'); 

Poi:

if(tab) { 
    var tab = window.open('http://yahoo.com','MyTab'); 
} 
+3

Penso che tutto quello che dovete fare è il nome della finestra. – Hemlock

+0

Puoi anche mettere a fuoco la scheda se è già aperta 'var win = window.open ('http://google.com', 'scheda'); if (win) { win.focus(); } ' – sohaiby

risposta

13

window.open ha i seguenti parametri: var tab = window.open(url, name, specs, replace) Finché si utilizza lo stesso name l'url verrà caricato in quella finestra/tab.

Se si desidera mantenere il descrittore/riferimento (tab sopra), restituisce window.open, una volta che l'utente aggiorna la pagina, tale riferimento viene perso.

+0

Ehi, questo funziona. Aggiornamento della mia domanda – BobB

+0

Idealmente potrei persistere oltre la pagina in cui l'utente è attivo poiché i prodotti si trovano su diverse pagine del sito. – BobB

+0

@BobB Se questo risponde alla tua domanda, fai clic sul segno di spunta sul lato sinistro per contrassegnarlo come tale. =) –

1

penso che la soluzione migliore potrebbe essere session storage/local storage, ma funziona solo nei browser più recenti.

+0

Penso che tu abbia ragione se voglio persistere oltre la pagina su cui l'utente è attivo. Grazie – BobB

0

Tutto ciò che serve è salvare un riferimento alla scheda aperta che è possibile correlare con un ID che avrà senso per te ... Quindi quando è necessario riaprirlo di nuovo basta usare il riferimento salvato da lì è possibile accedere la tua finestra genitore o apri da window.opener. Inoltre, per sapere quando la finestra secondaria è chiusa, c'è un evento predefinito del browser "beforeunload" che quando chiamato può rimuovere la finestra dal tuo oggetto di riferimento nel tuo genitore in modo da sapere che devi riaprirlo non solo focalizzarlo.

0

Ho seguito tutti i passaggi e ho trovato alcuni punti. L'ho provato su IE. Non ha funzionato come previsto se si utilizza URL come (htp: //www.google.com) e ha funzionato se si utilizza la pagina del dominio.

Mentre funzionava bene per Firefox e Chrome.

Seguendo l'esempio non funziona:

<script type="text/javascript"> 
    function myfunction1() { 
     window.open('http://www.google.com', 'f'); 
    } 
    function myfunction2() { 
     window.open('http://www.yahoo.com', 'f'); 
    } 
</script> 
<body> 
    <form id="form2" runat="server"> 
    <div> 
     <a href="#" onclick='myfunction1();'>myfunction1</a> 
     <a href="#" onclick='myfunction2();'>myfunction2</a> 
    </div> 
    </form> 
</body> 
</html> 

e seguendo l'esempio funziona:

<script type="text/javascript"> 
     function myfunction1() { 
      window.open('WebForm1.aspx', 'f'); 
     } 
     function myfunction2() { 
      window.open('WebForm2.aspx', 'f'); 
     } 
</script> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <a href="#" onclick='myfunction1();'>myfunction1</a> 
     <a href="#" onclick='myfunction2();'>myfunction2</a> 
    </div> 
    </form> 
</body> 
</html> 
Problemi correlati