【发布时间】:2011-09-21 01:46:55
【问题描述】:
我想知道谷歌如何在不定义 target="_blank" 的情况下设法在新窗口/标签中打开外部链接。
例如在 google plus 中,所有外部链接都会在新窗口中打开。 我认为它是一些 Javascript 巫术,但 .js 代码被混淆了,所以我无法真正查看。
编辑:哦,后续问题:为什么?
【问题讨论】:
标签: hyperlink
我想知道谷歌如何在不定义 target="_blank" 的情况下设法在新窗口/标签中打开外部链接。
例如在 google plus 中,所有外部链接都会在新窗口中打开。 我认为它是一些 Javascript 巫术,但 .js 代码被混淆了,所以我无法真正查看。
编辑:哦,后续问题:为什么?
【问题讨论】:
标签: hyperlink
使用框架使这变得容易。只需让 JavaScript 查找标记为 rel="external" 的链接,或显示它们为外部链接的其他标识符,然后动态添加 target="blank"。下面是一个使用 Prototype 的示例:
$$('a[rel="external"]').each(function(a) {
a.setAttribute('target', '_blank');
};
【讨论】:
a.not([href^="http://example.com/"]) 来获取所有不指向给定域的链接,但在 javascript 中处理 https 和子域更容易)。 ps.,你想要_blank,否则你最终会将所有链接推送到同一个窗口中。
在允许锚链接事件返回 true 之前,他们通过 javascript 添加 target 属性并不是没有道理的。
【讨论】:
它是 JavaScript。你可以说:
window.open('http://example.org', '_blank').focus();
但是请不要。在新窗口中打开链接几乎总是错误的做法。说真的,很好用的很少。如果用户希望在新窗口中打开链接,他们完全可以自己完成。
雅各布尼尔森是telling people this twelve years ago。 Othershavetakenupthecudgels。 W3C 从HTML 4 中删除了target 属性,因为这是个坏主意。老实说,我不明白这种用法是如何持续存在的。当一个网站对你这样做时,你不觉得非常烦人吗?你为什么要写一个对别人这样做的网站?
这让我想到了您的后续问题。为什么谷歌决定这样做?我对此没有任何答案,我完全和完全困惑的是,最大、最聪明的网络公司之一怎么会犯这样一个基本的错误。但是,很多 Google Plus 界面的可用性很差(例如,大多比 Facebook 差);我怀疑这背后有一个有趣的故事。该项目是否资源不足,因此在 GWT 等快速开发框架之上构建成本低廉?它是由一个对 Web 架构有盲点的独狼创建的业余项目吗?它是由不关心技术正确的战略专家驱动的吗?谜。
【讨论】: