【问题标题】:How do Google opening links in a new window without target attribute?谷歌如何在没有目标属性的新窗口中打开链接?
【发布时间】:2011-09-21 01:46:55
【问题描述】:

我想知道谷歌如何在不定义 target="_blank" 的情况下设法在新窗口/标签中打开外部链接。

例如在 google plus 中,所有外部链接都会在新窗口中打开。 我认为它是一些 Javascript 巫术,但 .js 代码被混淆了,所以我无法真正查看。

编辑:哦,后续问题:为什么?

【问题讨论】:

    标签: hyperlink


    【解决方案1】:

    使用框架使这变得容易。只需让 JavaScript 查找标记为 rel="external" 的链接,或显示它们为外部链接的其他标识符,然后动态添加 target="blank"。下面是一个使用 Prototype 的示例:

    $$('a[rel="external"]').each(function(a) {
      a.setAttribute('target', '_blank');
    };
    

    【讨论】:

    • 感谢您的解释。我想知道他们为什么这样做?我认为目标空白属性已被弃用,那么之后偷偷溜进去有什么意义呢?
    • 但这需要提前插入类。除非页面上有 很多 个链接,否则通常最简单的方法就是遍历 所有 个链接,检查 URL,并过滤掉那些不应该修改的链接.您还可以在 CSS3 中使用否定和属性选择器(例如,a.not([href^="http://example.com/"]) 来获取所有不指向给定域的链接,但在 javascript 中处理 https 和子域更容易)。 ps.,你想要_blank,否则你最终会将所有链接推送到同一个窗口中。
    • @Joe 感谢您指出这一点。现在已修复。你的解决方案和我的一样可行。但代码的重点是展示它在理论上是如何工作的。做到这一点的最好方法本身就是一个完全不同的问题。
    【解决方案2】:

    在允许锚链接事件返回 true 之前,他们通过 javascript 添加 target 属性并不是没有道理的。

    【讨论】:

      【解决方案3】:

      它是 JavaScript。你可以说:

      window.open('http://example.org', '_blank').focus();
      

      但是请不要。在新窗口中打开链接几乎总是错误的做法。说真的,很好用的很少。如果用户希望在新窗口中打开链接,他们完全可以自己完成。

      雅各布尼尔森是telling people this twelve years agoOthershavetakenupthecudgels。 W3C 从HTML 4 中删除了target 属性,因为这是个坏主意。老实说,我不明白这种用法是如何持续存在的。当一个网站对你这样做时,你不觉得非常烦人吗?你为什么要写一个对别人这样做的网站?

      这让我想到了您的后续问题。为什么谷歌决定这样做?我对此没有任何答案,我完全和完全困惑的是,最大、最聪明的网络公司之一怎么会犯这样一个基本的错误。但是,很多 Google Plus 界面的可用性很差(例如,大多比 Facebook 差);我怀疑这背后有一个有趣的故事。该项目是否资源不足,因此在 GWT 等快速开发框架之上构建成本低廉?它是由一个对 Web 架构有盲点的独狼创建的业余项目吗?它是由不关心技术正确的战略专家驱动的吗?谜。

      【讨论】:

      • 新窗口 - 烦人。新标签 - 不烦人。实际上,对我来说,当我想要在新标签页中打开而网站不让我打开时,因为 Javascript 链接而更加烦人。
      • 我就在你身边。我不想使用它,我只是想知道为什么谷歌以那种 hacky 方式使用它。我知道它已被弃用,并且一直使用此属性是一个错误的决定。只对这个话题感到好奇。
      • @UncleZeiv:关于 JS 链接阻止您打开新标签(或窗口),您是绝对正确的。这些确实比强制使用新标签或窗口更严重。但是,我仍然觉得强制使用新标签很烦人;比强制一个新窗口更烦人,但仍然很烦人。同样令人讨厌的是页面在打开时会抓住焦点,这会干扰有效的选项卡式浏览。最重要的是,链接应该是链接,如果他们愿意,应该由用户在新窗口或标签中打开它们。
      • @Michele:他们的“为什么”是一个很好的问题,但我怀疑你不会在这里得到一个很好的答案,除非 Google Plus 团队的某个人阅读了这个问题。尽管我不想这么说,但您更有可能在Quora 上获得该部分问题的答案。
      • 谢谢汤姆,很遗憾我没有收到 Quora 的邀请。但无论如何,有时你必须接受事物的本来面目。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 2014-12-12
      相关资源
      最近更新 更多