Различить ссылку, открытую в текущей вкладке и новой вкладке - PullRequest
6 голосов
/ 13 февраля 2012

Пример того, что я хочу сделать: На Facebook, щелкнув ссылку, чтобы открыть ее на текущей вкладке, активируется некоторый Javascript вместо открытия ссылки. Однако, открыв ее на новой вкладке (щелкнув правой кнопкой мыши или удерживая Ctrl / Cmd), вы откроете ссылку без вызова Javascript.

Я бы хотел сделать то же самое со своими ссылками (поведение ссылок зависит от цели). У меня есть обработчик события onclick return false;, чтобы не открывать ссылку; но это приводит к тому, что нажатие Ctrl + не приводит к открытию ссылки. Как мне этого добиться?

РЕДАКТИРОВАТЬ: Я не хочу ссылки принудительно открываться в новых окнах. ЕСЛИ ссылка открывается в новом окне, я хочу, чтобы она следовала href как обычно. Однако, IF ссылка открыта в текущем окне, вместо того, чтобы переходить по ссылке в текущем окне , я хочу запустить Javascript.

Facebook делает это, чтобы открыть изображение во всплывающем «театре», если вы откроете его в текущем окне, и откройте его на полной странице, если откроете его в новом окне.

Обратите внимание, что при захвате события click в ссылках и использовании preventDefault() или return false происходит сбой при нажатии Cmd + (открыть в новой вкладке). В любом случае, это должно работать независимо от того, как открыта ссылка - нажмите, введите клавишу и т. Д.

РЕДАКТИРОВАТЬ 2: Кажется, hashchange / HTML5 pushState - правильный путь для этого

1 Ответ

3 голосов
/ 13 февраля 2012

Вы можете установить href привязки, указывающей на правильный URL.Таким образом, щелчок правой кнопкой мыши и открытие в новой вкладке или окне будет работать нормально.

Используйте jQuery, чтобы привязать обработчик событий click к привязке следующим образом.

$('a').click(function(e){
   //Do whatever javascript operation you want.
   if(!e.ctrlKey){
         e.preventDefault();//Stop the page to navigate to the url set in href
   }
});

Демонстрация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...