为什么带有 rel="noopener noreferrer" 的链接总是在新标签页中打开?

丸山

我们有一个网站,其中包含多个指向 Web 应用程序的链接。预期行为是第一次单击任何链接应在新选项卡中打开 Web 应用程序,任何后续单击都应在同一新选项卡中打开 Web 应用程序。

我们这样做是因为我们的用户只希望同时打开一个 Web 应用程序实例。

这适用于将target属性添加到链接:

<a https://example.com" target="webapp-tab">Link 1</a>
<a https://example.com" target="webapp-tab">Link 2</a>

但是我们的 CMS 会自动添加rel="noopener noreferrer"到所有链接中,因此链接将如下所示:

<a https://example.com" target="webapp-tab" rel="noopener noreferrer">Link 1</a>
<a https://example.com" target="webapp-tab" rel="noopener noreferrer">Link 2</a>

问题是这会改变行为。现在,每次单击任何链接都会打开一个新选项卡。

行为改变是否有特定原因?据我所知,区别应该只是请求不会发送引用者和开启者信息,但是为什么它会在新选项卡中打开?

即使rel="noopener noreferrer"添加到链接中,我能做些什么来保持原始行为

04FS

但为什么它会在新标签页中打开?

似乎是这样指定的,https : //developer.mozilla.org/en-US/docs/Web/HTML/Link_types说:

请注意,当noopener使用时,除_top,_self之外的非空目标名称_parent都被视为_blank决定是否打开新窗口/选项卡。

我的猜测 - 使用应用程序本身指定的不同选项卡名称,可能会担心某种不应泄漏的信息可能会泄漏 - 例如,如果不同的脚本首先打开具有该名称的选项卡,但没有noopener-然后它可以引用该选项卡,并在稍后用户打开明确noopener设置的链接时仍使用该引用访问内容

即使将 rel="noopener noreferrer" 添加到链接中,我还能做些什么来保持原始行为。

这可能会破坏此功能最初应该提供的安全性。

您可以尝试在加载文档后让 JS 运行在您的文档上,并让它rel从这些链接中删除属性,分别是。noopener从其值中删除该部分。

那么您当然不会获得此功能提供的任何“保护”,但是在同一个选项卡中打开所有链接应该仍然有效。


编辑:将具有此特定target设置的所有链接的属性值设置为空字符串的简单方法

document.querySelectorAll('[target="webapp-tab"]').forEach(function(e) { e.rel = ''; } )

(当然,请确保在文档加载后执行该操作。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

href中的mailto:我应该添加rel noopener,noreferrer吗?

与target =“ _ blank”和rel =“ noopener noreferrer”的链接仍然容易受到攻击?

为什么超链接无法在新标签页中打开?

只有 CSS 在新标签页中打开链接

带有标签的超链接不会在新标签页中打开

为什么动态ELF文件中没有.rel.dyn / .got.plt节?

Rails:在新标签页中打开链接(带有“ link_to”)

Wicket为什么在新标签页中打开链接时页面过期?

单击鼠标中键并不总是在Chrome的新标签页中打开链接

有什么办法可以从内部html(角度6)中的新标签页中打开链接

如果链接有 target=_blank,如何在新标签页中打开链接?

关于HTML中的“链接”标签,“样式表”之后,“ rel”属性最常用的值是什么?

在drupal术语pagas中没有rel =“ next”和rel =“ prev”

如何在新标签页中打开iframe中的所有链接

如何在新标签页中打开块中的所有链接

在新标签页中打开链接时,Firefox的HTTP引荐来源网址是什么?

如何设置Firefox在新标签页中打开任何/所有链接?

Google Chrome:是否有键盘快捷键可在新标签页中打开链接?

在新标签页target =“ _ blank”中打开帖子上的所有链接

重新编写页面上的所有链接以通过javascript在新标签页中打开

在页面加载后附加带有 rel = prefetch 或 prerender 的链接会触发预取吗?

rel =“ generator”标记在Wordpress中是什么意思?

rel =“ nofollow”在社交链接中?

如何将带有rel =“ self”的atom:link添加到rss文档中?

为什么在C ++ 20中不推荐使用std :: rel_ops :: operators?

为什么添加“ rel ='stylesheet'”阻止本地CSS文件加载到浏览器中?

在现有的rel属性中添加“ nofollow”

为什么通道类型中带有“ <-”?

带有rel preload的预加载字体