【问题标题】:target="_blank" opens in new tabs in firefox but not chrome (Svelte)target="_blank" 在 Firefox 的新标签中打开,但不是 chrome (Svelte)
【发布时间】:2021-07-10 16:48:19
【问题描述】:

我有一个带有几个内部链接和几个外部链接的小型单页应用程序。我希望所有外部链接都自动在新选项卡中打开,因此我将 html 设置如下:

    <base target="_blank" />

这在 chrome 中效果很好。当我单击导航栏上的链接时,我的网站会在同一个选项卡中导航,当我单击外部链接时,它会尽职尽责地在新选项卡中打开。

但是,当我使用 firefox(已测试多个版本)访问我的网站时,每个链接,甚至是导航栏上的内部链接,都会在新选项卡中打开。

如何更正此问题,以便在所有浏览器的新选项卡中仅打开外部链接? 谢谢

【问题讨论】:

  • 您是否尝试过在导航栏链接上显式?就像在那些上面使用target="_self"

标签: html svelte


【解决方案1】:

静态解决方案是在内部链接上显式,即将target="_self" 添加到这些链接。

如果您不希望这样,Javascript 也可以提供帮助,具体取决于您的设置。

假设您的内部链接都是相对的或至少是服务器绝对链接,并假设您的页面是静态的(例如在DOMContentLoaded 之后没有将链接添加到页面),以下 Javascript sn-p 将解决该任务:

document.addEventListener('DOMContentLoaded', () => {
  for (const externalLink of document.querySelectorAll('a[href^=http]'))
    externalLink.target = '_blank';
})
<a href="https://google.com">Google</a>
<a href="/">Some internal link</a>

正如另一个家伙指出的那样,这当然只有在您的链接可以从文档中访问时才有效(如果它们位于 shadowDOM 中则不行)。

【讨论】:

  • 不一定,如果 svelte 编译为带有 shadow dom 的自定义 html 组件
  • Downvote for suggesting to add global JavaScript dom manipulation when the tool of choise is component-based framework
【解决方案2】:

根据@connexo 的评论,我通过明确说明解决了这个问题

target="_self"

在导航栏链接中。

【讨论】:

  • 我已将此添加到我的答案中,以及 Javascript 替代方案。
【解决方案3】:

如果您想覆盖浏览器默认功能,您需要专门为外部链接设置目标。制作一个链接组件来执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-09
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    相关资源
    最近更新 更多