Как избежать создания новых вкладок по той же ссылке (уже открыта в браузере)

0

Моя панель - это сетка с множеством фрагментов, каждая из которых имеет ссылку на другую страницу.

Каждый раз, когда я нажимаю ссылку, она создает новую вкладку даже для ссылки, которая была открыта ранее.

** Как подавить открытие новых вкладок для ссылок, которые уже открыты в браузере с помощью Angular?

Примечание. Внешние ссылки не должны открываться на вкладке, в которой открыта панель мониторинга **

Я использовал следующий код в файле сценария

  $scope.openInNewWindow = function(url, $event) {
    $window.open(url);
    $event.preventDefault();
  }

И я называю это, используя:

<a class="ui-button ui-button-stretch" ng-href="{{link.url}}" ng-click="openInNewWindow(link.url, $event)">

1 ответ

1

В ванильном HTML, если вы всегда указываете один и тот же target (не считая "_blank") атрибут для каждой ссылки, которую вы пытаетесь скрыть на одной и той же вкладке, он должен всегда приземляться в одной и той же вкладке/окне (если пользователь не закрыл ее), Это может быть проблематично, если они покинут эту вкладку/окно, а затем нажмите ссылку again--, они могут не заметить, что старая вкладка/окно перезагрузила контент в зависимости от того, как браузер обрабатывает загрузку/фокусировку ссылки.

Этот вопрос в стороне... использование target = "_ blank" или window.open() в скрипте не то, что вы хотите сделать... Вы хотите использовать что-то вроде target = "resource1", target = "resource2" для каждого уникальный URL-адрес, который вы хотите оставить в своей вкладке/окне.

Вы можете использовать это для того, что вы пытаетесь сделать.

С помощью Angular вы, вероятно, захотите использовать директиву... и, возможно, сбросить свой атрибут ng-click. Возможный пример, адаптированный из (условно добавьте target = "_ blank" к ссылкам с Angular JS) через ответ Себастьяна по аналогичной теме:

    module.directive('myTarget', function () {
    return {
        restrict: 'A',
        link: function(scope, element, attrs) {
          var href = element.href;
          if(href == "/resource1.html") { // replace with your conditions to match your urls
            element.attr("target", "resource1");
          else if( href == "/resource2.html")
            element.attr("target", "resource2"); // etc.
          }
        }
    };
});

Применение:

<a href="/resource1.html" my-target>Link</a>
  • 0
    Я согласен, но думаю, что директива излишня. Просто поместите target = "" в тег html, чтобы он был более гибким и понятным для других разработчиков.
  • 0
    @ Tom Barstow У меня уже есть ссылки, которые хранятся в объекте ссылок (ссылки на внешние веб-сайты), которые находятся на dashboard.html, и всякий раз, когда пользователь нажимает на любую ссылку, пользователь должен получить ее на новой вкладке, а когда пользователь щелкает ее снова (и если предыдущая вкладка открыта), то старая вкладка должна быть перезагружена. Разве мы не можем сделать это без введения нового модуля?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню