如何避免为同一链接创建新选项卡(已在浏览器中打开)

时间:2016-07-27 14:18:11

标签: javascript html angularjs

我的信息中心是一个包含许多图块的网格,每个图块都有一个指向不同页面的链接。

每次点击链接时,它都会为之前打开的链接创建一个新标签。

**如何使用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 个答案:

答案 0 :(得分:1)

在vanilla HTML中,如果您始终为同一选项卡中包含的每个链接提供相同的target(不计算“_blank”)属性,则应始终位于相同的选项卡/窗口中(如果用户尚未关闭它)。如果他们离开该选项卡/窗口然后再次单击该链接,则可能会出现问题 - 他们可能不会注意到旧的选项卡/窗口重新加载内容,具体取决于浏览器如何处理链接的加载/聚焦。

除了那个问题...在脚本中使用target =“_ blank”或window.open()不是你想要做的......你想使用像target =“resource1”,target =“resource2这样的东西“对于您希望保留在自己的标签/窗口中的每个唯一网址。

您可以根据自己的目标使用此功能。

使用Angular,您可能希望使用指令...并可能删除ng-click属性。可能的例子改编自(Conditionally add target="_blank" to links with 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>