【问题标题】:How to avoid creating new tabs for the same link(already opened in the browser)如何避免为同一链接创建新选项卡(已在浏览器中打开)
【发布时间】:2016-07-28 02:06:03
【问题描述】:

我的仪表板是一个包含许多磁贴的网格,每个磁贴都有指向不同页面的链接。

每次我单击链接时,它都会创建一个新选项卡,即使是之前打开的链接也是如此。

**如何禁止打开已使用 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)">

【问题讨论】:

    标签: javascript html angularjs


    【解决方案1】:

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

    除了那个问题...在脚本中使用 target="_blank" 或 window.open() 不是您想要做的...您想使用类似 target="resource1", target="resource2 " 对于您希望保留在其自己的选项卡/窗口中的每个唯一 URL。

    您可以将其用作您尝试做的事情的基础。

    使用 Angular,您可能想要使用指令...并可能删除您的 ng-click 属性。可能的示例改编自 (Conditionally add target="_blank" to links with Angular JS) 通过 Sebastian 对类似主题的回答:

        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>
    

    【讨论】:

    • 我同意,但确实认为该指令是矫枉过正。只需将 target="" 放在 html 标签上,更灵活,更容易被其他开发者理解。
    • @Tom Barstow 我已经将我的链接存储在链接对象(它们是指向外部网站的链接)中,它们位于dashboard.html 上,每当用户点击任何链接时,用户都应该得到它在新选项卡上,当用户再次单击它时(如果前一个选项卡已打开),则应重新加载旧选项卡。不引入新模块就不能做到吗?
    • 哦,从阅读您的最新评论来看,听起来所有链接都应该只指向一个选项卡——我在想您想要 x 个选项卡取决于正在加载的资源(每个独特的站点/地址...)我现在的建议是 Bob Brinks 暗示的内容,只需将您的 ng-click="..." 替换为 target="myTab" 看看这是否能满足您的期望。
    猜你喜欢
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    相关资源
    最近更新 更多