Dlaczego kliknięcie CTRL nie otwiera niektórych łączy w nowej karcie?

18

Czasami podczas przeglądania klikam link, przytrzymując klawisz Ctrl, aby otworzyć go w nowej karcie. Jednak zamiast otwierać nową kartę, jest ona klikana i przeglądana w bieżącej karcie, tak jakbym kliknął ją normalnie bez przytrzymywania klawisza Ctrl. Jestem pewien, że przytrzymuję klawisz Ctrl w pełni i że nie ma winy w klawiaturze lub myszy.

Czasami nowa karta zostanie otwarta z linkiem, ale bieżąca karta będzie jednocześnie przeglądać link.

Coldblackice
źródło
3
Być może nie są to rzeczywiste linki, w tym sensie, że „link” używa onclickoperacji, która mogłaby zepsuć się klawiszem Ctrl + kliknięcie. Czy możesz podać konkretny przykład? meta.stackoverflow.com/questions/276138/…
imtheman
@imtheman Świetny punkt, jednak wydaje się, że tak nie jest, przynajmniej w przykładach, które widziałem. Wiem o tym, ponieważ zawsze przesuwam kursor myszy nad linkiem, aby sprawdzić, czy wyświetla on adres URL na pasku stanu. Przykład jest tutaj: nationaljournal.com/white-house/... W lewej kolumnie / pasku linki do innych historii wydają się być własnymi adresami URL, zweryfikowanymi przez przeskoczenie do ich lokalizacji w źródle, jednak kliknięcie z wciśniętym klawiszem Ctrl nie powoduje działa, zamiast tego działa tak, jakby ctrl nie był trzymany.
Coldblackice,
Jeśli spojrzysz na kod źródłowy tej strony, zobaczysz to dla jednego z linków:<a class="primary" href="/superuser//congress" onclick="var x=&quot;.tl(&quot;;s_objectID=&quot;http://www.nationaljournal.com/congress_1&quot;;return this.s_oc?this.s_oc(e):true">Congress</a>
imtheman
1
Chociaż ma hrefatrybut, jest zastępowany przez zdarzenie onclick.
imtheman
1
Napisałem dodatek do Firefoksa, aby rozwiązać ten problem. github.com/danielnixon/link-fixer
danielnixon

Odpowiedzi:

8

JavaScript za kulisami

Dzieje się tak, gdy twórcy takich stron internetowych przechwytują kliknięcia myszy za pomocą JavaScript i wykonują asynchroniczne żądania sieciowe wewnątrz przechwytywacza, potencjalnie w celu śledzenia kliknięć. Kiedy asynchroniczne połączenie sieciowe powraca, JS dokonuje przekierowania programowego, używając czegoś takiego:window.location.href = url;

To programowe przekierowanie zawsze ładuje stronę na tej samej karcie, nawet jeśli przytrzymasz Ctrl( Cmdna Macu).

Do przesłonięcia użyj MiddleMouse

Kliknięcie środkowym przyciskiem myszy lub wybranie opcji „otwórz w nowej karcie” z menu kontekstowego całkowicie ominie przechwytujący kod JavaScript i otworzy łącze, jakby w ogóle nie było kodu JavaScript.

Walentin Wasiljew
źródło
To nie jest w pełni poprawne. Podczas gdy niektóre projekty kodu pozwalają na alternatywny wyzwalacz, który zmusza stronę do otwarcia w nowej karcie, inne projekty kodu zapobiegają temu. Jest to bardziej powszechne w witrynach z dynamiczną treścią, która nie ma typowych „stron” i zamiast tego generuje strony po kliknięciu przycisków. W tym przypadku na stronie nie ma prawdziwych „linków”, ale raczej przyciski, które uruchamiają zachowanie bardziej jak aplikację.
music2myear
6

Napisałem dodatek do przeglądarki Firefox (nudno) o nazwie link-fixer, aby to naprawić. Możesz zainstalować z addons.mozilla.org . Wymaga przeglądarki Firefox 48.0 lub nowszej.

Cytując siebie:

Domyślne zachowanie klawiszy Ctrl + kliknięcie, Shift + kliknięcie i cmd + kliknięcie podczas klikania łączy polega na otwarciu łącza w nowej karcie lub nowym oknie. To zachowanie jest czasami łamane przez nieostrożnych programistów. Ten dodatek przywraca domyślne zachowanie, zapewniając, że klucze modifer są zawsze przestrzegane.

Po zainstalowaniu nie musisz nic więcej robić. Możesz przytrzymać klawisz Ctrl + kliknięcie dowolnego łącza, a otworzy się ono w nowej karcie. Rozwiąże również odmianę problemu opisanego w drugim akapicie.

danielnixon
źródło
1
Cześć Daniel, chociaż wspaniale jest, że napisałeś coś, aby rozwiązać ten problem, czy możesz przeczytać, jak polecić oprogramowanie w odpowiedzi , szczególnie części pogrubione i zaktualizuj swoją odpowiedź, proszę? Dzięki :)
bertieb
3

Weźmy ten link jako przykład:

<a href="test.php" onclick="someFunction(this); return false;">Test</a>

The hrefAtrybut, w tym przypadku, jest stworzenie łącza pseudo dla czytelności (Pozwoli to również link do pracy nawet wtedy, gdy JavaScript jest wyłączony). Powodem tego jest to, że onclickatrybut zawsze działa jako pierwszy. Duże witryny, takie jak Google, robią to, aby śledzić kliknięcia i próbować uniemożliwić użytkownikowi odwiedzanie witryn zawierających złośliwe oprogramowanie. Z tego powodu Ctrl+ kliknięcie nie działa. Jeśli jednak użyjesz środkowego przycisku myszy, prawie zawsze działa.

jestem mężczyzną
źródło
1
Próbuję znaleźć środkową mysz na komputerze Mac .
Eduard
Napisałem dodatek do Firefoksa, aby rozwiązać ten problem. github.com/danielnixon/link-fixer
danielnixon