2013-03-21 12 views
7

Google Chrome jest obecnie trochę dziwny, ponieważ V25 nie respektuje już nagłówka przekierowania 302 i z przyjemnością ponownie umieszcza dane na stronie podczas odświeżania strony, podczas gdy v24 i wszystkie inne przeglądarki ładnie się odtwarzają. Nie jestem pewien, czy to tylko tymczasowy błąd przeglądarki, więc pozwól mi opisać tajemnicę, którą próbuję rozwiązać.Dlaczego blokowanie wyskakujących okienek przeglądarki Google Chrome powoduje zestrzelenie linku, gdy zawiera obraz lub inny znacznik?

Z tego co wiem, nie można otworzyć zakładki przy użyciu HTML lub JavaScript, ale nowe okno bez jawnie ustawionych wymiarów zostanie domyślnie otwarte jako karta.

Najpierw próbowałem to:

<a href="URL" onclick="window.open(this.href);return false"> 
    <img src="NICE IMAGE" alt="foo"> 
</a> 

to działa wszędzie, z wyjątkiem Chrome gdzie został zestrzelony jako nieuprawnioną okienko. Co ciekawe, czasami, gdy ciągle go klikałem, Chrome zmienił zdanie i pozostawił link otwarty mimo to (jako zakładka). Nie zawsze tak było, czasami link pozostawał martwy.

Po paru godzinach eksperymentowanie (i zmieniwszy od onclick do prostego target="_blank") Odkryłem, że powodem link został zabity to, że zdarzenie click zaczęło się od znacznika <img> w <a>. Kiedy zamieniłem <img> z <span>, który zawierał jakiś tekst i kliknąłem na <span>, link nie mógł się otworzyć (Chrome rozpoznał to jako niechciane wyskakujące okienko), ale kiedy kliknąłem na znacznik <a> sam (który miał stały rozmiar lub wyściółkę), następnie została zaakceptowana i narodziła się nowa zakładka.

W końcu właśnie umieściłem obrazy jako tło CSS, a tagi <a> pozostały puste. Wszystko wydaje się być obecnie działa w każdej przeglądarce z tym znaczników:

<a href="URL" target="_blank" style="background:url('NICE_IMAGE'); height:XXX; width:XXX" title="Description"></a> 

Co może być powodem logiki Google Chrome, że gdy związek zawiera znacznik, to jest zabronione przed otwarciem w nowej karcie, ale kiedy jest pusta, to może iść dalej?

+0

Domyślam się, że Chrome stara się zablokować niektóre z typowych sposobów, w jakie użytkownicy internetu są "oszukiwani", klikając link, który kończy się wyskakującym okienkiem. Głównie, gdy witryna tworzy pełny przejrzysty obraz strony, który jest linkiem. Nie widzisz tego, ale klikasz, gdy próbujesz kliknąć element bazowy. Ale to tylko domysły ... – chrixbittinx

+0

Czy masz jakieś inne zdarzenia powiązane z którymś z tagów, których dotyczy problem? Może to wpłynąć na działanie popup blockera.Byłoby bardzo pomocne, gdybyś mógł przedstawić stronę demonstracyjną. – mrks

+0

Należy także aktywować punkty przerwania odbiornika zdarzeń w Inspektorze (w obszarze Źródła) i poinformować nas, jakie typy zdarzeń są uruchamiane po kliknięciu elementu. – mrks

Odpowiedz

3

Po pewnym testów:

  • Chrome Wersja - 25.0.1364.172 m: pracował w porządku!
  • Wersja Chrome - 26.0.1410.43 m: działa bez zarzutu!

"Normalny" sposób otwierania karty działa w obu nowszych wersjach. Testowany!

mój kod:

<?php 
echo ' 
    <a href="http://www.google.com" onclick="window.open(this.href); return false;"> 
     <img src="http://static.adzerk.net/Advertisers/2565.png" alt="foo" /> 
    </a> 
    '; 
?> 

problem powinien być na swoich stronach ...

EDIT: BUG SZUKAJ szukałem zgłoszonych i naprawionych błędów w tej kwestii, ale nie mogliśmy znaleźć niczego.

+0

To samo, działa w wersji Chromium 25.0.1364.160 Ubuntu 13.04 (25.0.1364.160-0ubuntu1b1) – NoBugs

+2

Ten sam problem pojawił się ostatnio w innej witrynie, nad którą pracowałem i okazało się, że biblioteka JavaScript analytics dziwny błąd ninja. – Wabbitseason

+0

to samo, co powyższa przyczyna – anson

Powiązane problemy