2012-11-16 9 views
9

Gdy użytkownik dodaje przedmiot do naszego koszyka, otwiera nasz sklep w nowej karcie. Różne strony dość dziwnie.Sprawdź, czy zakładka przeglądarki jest już otwarta, więc nie robię dodatkowych zakładek.

Chciałbym sprawdzić, czy zakładka jest już otwarta, a następnie ponownie zaludnić ją drugim przedmiotem, zamiast otwierać kolejną zakładkę ze zaktualizowanym koszykiem.

Czy można to sprawdzić za pomocą js? Wyobrażam sobie, że mogę śledzić, że otworzyliśmy kartę, ale nie widzę, jak mogę potwierdzić, że nie została zamknięta w czasie pomiędzy dodawaniem przedmiotów do koszyka bez wykonywania niektórych żądań ajax pingujących obie strony itd. Co wydaje się przesadą.

Po prostu, jak sprawdzić, czy zakładka przeglądarki jest już otwarta?

Zmieniano roztworem: pierwsze:

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

Następnie:

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

myślę, wszystko co musisz zrobić, to wymienić okna. – Hemlock

+0

Możesz także po prostu ustawić fokus na karcie, jeśli jest już otwarty 'var win = window.open ('http://google.com', 'tab'); if (win) { win.focus(); } ' – sohaiby

Odpowiedz

13

window.open ma następujące parametry: var tab = window.open(url, name, specs, replace) Dopóki używasz tego samego name url zostanie załadowany w tym oknie/karcie.

Jeśli chcesz zachować deskryptor/odniesienie (tab powyżej), ten window.open powraca, gdy użytkownik odświeży stronę, to odniesienie zostanie utracone.

+0

Hej to działa. Aktualizowanie mojego pytania – BobB

+0

Idealnie mógłbym utrzymać to poza stroną, na której znajduje się użytkownik, ponieważ produkty są na różnych stronach w witrynie. – BobB

+0

@ BobB Jeśli to odpowie na twoje pytanie, kliknij znak zaznaczenia po lewej stronie, aby oznaczyć go jako taki. =) –

1

myślę najlepszym mogłoby być session storage/local storage, ale działa tylko w nowszych przeglądarkach.

+0

Myślę, że masz rację, jeśli chcę pozostać poza stroną, na której jest użytkownik. Dzięki – BobB

0

Wystarczy zapisać odniesienie do otwartej zakładki, które można powiązać z jakimś id, który ma dla ciebie sens ... Wtedy, gdy musisz ponownie go otworzyć, po prostu użyj zapisanego odnośnika, z którego możesz uzyskać dostęp twoje okno rodzica lub otwieracza z window.opener. Aby wiedzieć, kiedy okno podrzędne jest zamknięte, znajduje się domyślne zdarzenie przeglądarki "beforeunload", które po wywołaniu może usunąć okno z obiektu referencyjnego w rodzica, aby wiedzieć, że trzeba go ponownie otworzyć, a nie tylko go ustawić.

0

Przejrzałem każdy krok i wymyśliłem kilka punktów. Testowałem to na IE. Nie działało zgodnie z oczekiwaniami, jeśli używasz adresu URL takiego jak (htp: //www.google.com) i działało, jeśli używasz strony domeny.

Chociaż działało dobrze w przeglądarkach Firefox i chrome.

Poniższy przykład nie działa:

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

I Poniższy przykład działa:

<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> 
Powiązane problemy