“在新标签页中打开所有外部链接”在选中部分文本时不起作用

  1. 确保在 /my/preferences/interfaceOther 界面选项中勾选了 Open all external links in a new tab 选项(无论如何,这似乎是默认设置)。
  2. 找到任何带有外部链接的帖子——例如,在 metatry 中。
  3. 点击该帖子中找到的第一个外部链接(最好是同一个)。

它在新标签页中打开,很好。 :+1:

但是:

  1. 确保在 /my/preferences/interfaceOther 界面选项中勾选了 Open all external links in a new tab 选项(无论如何,这似乎是默认设置)。
  2. 打开与上一个测试相同的帖子。
  3. 选择该帖子中的任意文本(1 个字母以上,1 个单词以上,任意选择即可)——您应该会看到一个浮动的 Quote 按钮。
  4. 点击该帖子中找到的第一个外部链接

:no_entry: :see_no_evil: :warning: 现在外部链接在新标签页中打开,而不是在当前标签页中打开。 :warning: :see_no_evil: :no_entry:


:information_source: 实际上,您可以直接尝试此帖子:

  1. 点击 此外部链接 – 好的,很好 :+1: 新标签页。
  2. 选择此文本。
  3. 再次点击第 1 步的外部链接 – 不好 :no_entry: 当前标签页。
4 个赞

我能确认。我不确定它是否值得修复,因为它似乎是一个极端情况,用户在自找麻烦。

1 个赞

因为你认为修复起来可能很棘手?

我经常点击。我经常选择文本。
所以它经常困扰我。

很久以前我就提到过这个bug,但这次我没有像这次一样地解释它。 :wink:

那确实很烦人。

如果你没有能力提交一个 PR(我认为我没有),那么只需使用 Control-Click 在新标签页中打开即可,这并不难自动化,并且可以解决所有网站上的问题,即使是那些不在新标签页中打开链接的网站。

1 个赞

我本来会使用 Ctrl+点击,但我们有这个很棒的选项,叫做“在新标签页中打开所有外部链接”。

但这个选项实际上做的是“在新标签页中打开随机外部链接”。

我花了几个月,甚至几年,才找到一个重现问题的方案。
对我来说,这感觉非常随机。

也许移除这个选项,以获得一致的行为?

我记得我曾试图为简单的 CSS 问题 PR 设置一个 Discourse 开发环境。
但是,如果我没记错的话,我放弃了,因为我的电脑太旧了,无法安装或运行所有必需的软件。

1 个赞

我找回了我之前安装 Discourse 开发环境失败的尝试
我之前的 Linux PC 太老了,而我的专业 Windows 笔记本电脑没有超线程

我的新专业笔记本电脑现在似乎启用了超线程\*,所以我将尝试在没有管理员权限的情况下遵循新说明

\* wmic CPU Get NumberOfCores,NumberOfLogicalProcessors 显示的逻辑核心数多于物理核心数。

你好,

我认为可以用 CSS 修复

.cooked a {
  @include user-select(text);
}

希望有帮助,我还没有真正测试过,但似乎运行良好。 :slightly_smiling_face:

编辑:应该将 user-select: text 添加到链接,因为不仅 .cooked 选择的文本会影响它,而且网站上所有选中的文本都会影响它。我已更改代码。

6 个赞

在我看来,这就像魔法一样。我想知道它是如何运作的,你能解释一下这个把戏吗? :hugs:

2 个赞

干得漂亮,Don,你想提交一个PR吗?

6 个赞

谢谢 Sam,我只是在提交前更仔细地测试了一下,但遗憾的是这还不够。此解决方案仅适用于 Chrome。

5 个赞

导致错误的这部分代码(来自 app/assets/javascripts/discourse/app/lib/click-track.js)

    // Cancel click if triggered as part of selection.
    const selection = window.getSelection();
    if (selection.type === "Range" || selection.rangeCount > 0) {
      if (selectedText() !== "") {
        return true;
      }
    }

删除此代码可以解决问题,并且似乎不会破坏测试(无论更改前后,我都有一些测试失败,但似乎没有新的测试失败)。
所以我想知道这段代码是否有任何用处,因为它所做的一件事肯定不是它所说的,否则 bug 报告者在“选择+点击”时根本不会跟随链接,但这并不是他的抱怨。
有人能分享一下这段代码应该实现什么功能吗?

1 个赞

也许是为了防止在仅选择一些文本进行引用或复制时在新标签页中打开链接?

当您找到的代码被禁用,并且您勾选了“在新标签页中打开所有外部链接”选项时,

您能否尝试选择(鼠标按下、拖动、鼠标松开)一些包含链接的文本,看看是否不会打开任何链接?

尝试选择包含链接的选择,也尝试选择结束在链接中间的选择,也许。

选择应该始终只是选择,而不是打开链接。

是的,此类选择按预期工作:不跟随链接或在新标签页中打开它们。

1 个赞

我隐约记得有一个针对特定浏览器的解决方法,也许可以尝试在 Safari/Firefox/Chrome 中进行选择,看看是否会触发它?

1 个赞

适用于 Firefox、Chrome。我应该如何在 Ubuntu 上尝试 Safari?

1 个赞

您的开发服务器是否可以在您的 Wi-Fi 上访问,以便您也可以用智能手机进行测试?

也许触摸屏的拖动事件触发了打开链接。

您可以将此智能手机浏览器(Firefox、Chromium 或 Safari)添加到您测试的浏览器列表中。:smiling_face_with_sunglasses:

顺便说一句,非常感谢您在此 bug 上的工作!!

我找到了这个取消代码的原因,看起来是这样的:

防止用户在主题中选择内容,并在释放鼠标时鼠标悬停在链接上。

https://meta.discourse.org/t/selecting-a-link-results-in-it-being-opened/14846

[已删除主题]

有趣的评论

我只能在 Windows 平台上进行测试。

这个修复很容易测试,因为可以将整个文件粘贴到控制台中。

@sam 你知道加载主题页面后应该将哪个文件粘贴到控制台中吗?
@Aleksey_Bogdanov 能提供那个文件吗?我可以在我的 Windows Vivaldi、Firefox、Android 9 Kiwi 浏览器控制台中粘贴它,你可以在你的 iOS、Mac OS Safari 中粘贴它。

我认为现在不再是这样了。

1 个赞

在 Chrome 和 Firefox for Android 上未检测到问题,尽管我在 Firefox 上选择时不如 Chrome 那么自由。

1 个赞

在你更改之前也是这样,对吗?