2012-11-16 16 views
9

Wenn ein Benutzer einen Artikel in unseren Einkaufswagen legt, wird er in einem neuen Tab geöffnet. Verschiedene Websites seltsam genug.Überprüfen Sie, ob eine Browser-Registerkarte bereits geöffnet ist, damit ich keine zusätzlichen Registerkarten anlegen kann.

Ich möchte überprüfen, ob die Registerkarte bereits geöffnet ist und dann es mit dem zweiten Element neu füllen, anstatt eine andere Registerkarte mit dem aktualisierten Warenkorb zu öffnen.

Gibt es eine Möglichkeit, dies mit js zu überprüfen? Ich stelle mir vor, ich kann verfolgen, dass wir den Tab geöffnet haben, aber ich kann nicht bestätigen, dass es in der Zeit zwischen dem Hinzufügen von Artikeln zum Warenkorb nicht geschlossen wurde, ohne Ajax-Anfragen an beide Seiten zu senden.

So einfach prüfen Sie, ob ein Browser Tab bereits geöffnet ist?

mit einer Lösung Editiert: Erstens:

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

Dann:

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

Ich glaube, alles, was Sie tun müssen, ist das Fenster nennen. – Hemlock

+0

Sie können auch den Fokus auf die Registerkarte setzen, wenn diese bereits geöffnet ist. 'var win = window.open ('http://google.com', 'tab'); if (win) { win.focus(); } ' – sohaiby

Antwort

13

window.open hat die folgenden Parameter: var tab = window.open(url, name, specs, replace) Solange Sie die gleiche name die URL geladen werden, verwenden, um in diesem Fenster/Tab.

Wenn Sie den Deskriptor/Referenz (tab oben) behalten möchten, der window.open zurückgibt, sobald der Benutzer die Seite aktualisiert, ist diese Referenz verloren.

+0

Hey das funktioniert. Aktualisieren meiner Frage – BobB

+0

Idealerweise konnte ich dies über die Seite hinaus fortsetzen, auf der sich der Benutzer befindet, da sich die Produkte auf verschiedenen Seiten der Website befinden. – BobB

+0

@BobB Wenn dies Ihre Frage beantwortet, klicken Sie auf das Häkchen auf der linken Seite, um es als solches zu markieren. =) –

1

Ich denke, die beste Wahl session storage/local storage sein könnte, aber es funktioniert nur in neueren Browsern.

+0

Ich denke, Sie haben Recht, wenn ich über die Seite bestehen will, auf der der Benutzer ist. Danke – BobB

0

Alles, was Sie brauchen, ist einen Verweis auf die geöffnete Registerkarte zu speichern, die Sie mit einer ID verknüpfen können, die für Sie Sinn macht ... Dann wenn Sie es erneut öffnen müssen, verwenden Sie einfach die gespeicherte Referenz von dort zugreifen Ihr Eltern- oder Eröffnungsfenster von window.opener. Um zu wissen, wann das untergeordnete Fenster geschlossen ist, gibt es ein Standard-Browser-Ereignis "beforeunload", das bei Aufruf das Fenster von Ihrem Referenzobjekt in Ihrem Elternteil entfernen kann, so dass Sie es erneut öffnen und nicht nur fokussieren müssen.

0

Ich ging durch jede Schritte und ich kam mit ein paar Punkten. Ich habe es auf IE getestet. Es hat nicht wie erwartet funktioniert, wenn Sie URL wie (htp: //www.google.com) verwenden und es funktioniert, wenn Sie Ihre Domain-Seite verwenden.

Während es für Firefox und Chrome gut funktionierte.

Das folgende Beispiel funktioniert nicht:

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

Und folgende Beispiel funktioniert:

<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> 
Verwandte Themen