【问题标题】:Behaviour of <link rel=alternate> in browsers<link rel=alternate> 在浏览器中的行为
【发布时间】:2019-09-13 11:03:49
【问题描述】:

我对浏览器中&lt;link rel="alternate" ...&gt; 的行为有点困惑,我正在寻找一些说明。让我们用下面的代码来说明:

<!DOCTYPE html>
<html lang="en">
    <head>
        <link rel="stylesheet" href="a.css" type="text/css" 
              title="Main Stylesheet">
        <link rel="alternate stylesheet" href="b.css" type="text/css" 
              title="Alternative Stylesheet">
        <link rel="alternate" href="fr.pdf" hreflang="fr" type="application/pdf" 
              title="Alternative document in French">
    </head>
    <body>
    </body>
</html>

当此代码在现代浏览器(例如 Firefox v27.01)中运行时,浏览器会解析上述 HTML 文档,然后下载样式表、a.css 和 b.css。前者用于将样式应用于文档。但是,b.css 可以通过上述浏览器的“查看 > 页面样式”菜单获得。因此,显然 Firefox 中的解析器能够识别“替代”样式表,并在这种情况下决定下载它。

可以在W3C > HTML5 > 4.8.4.1 阅读,解析这些&lt;link&gt;s 的结果基本上是引用相应文档的超链接。在样式表的情况下,浏览器也足够聪明,可以下载它。但是,对于我们示例中的另一个替代文档(fr.pdf),Firefox 似乎没有下载它,如果它链接它,它在任何地方都不可见。我在 Chrome (v.33.0.1750.117)、Opera (v.19.0.1326.63)、IE (v.10.0.9200.16798) 中进行了测试,并且可以观察到同样的事情(即没有可见的工件与 fr.pdf 已链接)。因此,由于所有这些现代浏览器的行为都是这样,看来我误解了“备用”关系的含义:) 有人能解释一下它们的用途吗?我的信念是,以 RESTful 方式,用户代理应该能够(超)链接所有 &lt;link&gt;s 以​​便导航该网络。

提前致谢。

【问题讨论】:

  • 我不确定 PDF 是否可以作为样式表被浏览器读取,这正是该代码似乎建议/尝试完成的。不过,&lt;link rel=alternate&gt; 只加载文件,因此您需要 CSS 来确定何时显示备用文件。
  • @TylerH 感谢您的及时回复,但是,pdf 链接只有“替代”关系。它不与样式表一起使用。 b.css 具有“备用样式表”关系。也许你因为我的缩进很差而混淆了线条:)
  • 我想既然你声明了lang=fr,你需要尝试加载网站,将浏览器的语言设置为fr。你试过这个吗?
  • 是的,但是将浏览器的首选语言更改为 FR 只会产生在请求 HTML 文档时将“Accept-Language”设置为 FR 的预期效果,并且服务器端可以对此做出反应.为了实验,我试了一下,没有任何变化。

标签: html http rest hateoas


【解决方案1】:

&lt;link&gt; 元素确实标识了与当前文档相关的外部文档。 rel 属性指定了这种关系的性质。在rel="alternate stylesheet"(某些)的特定情况下,浏览器可以对链接做一些特定的事情。特别是,Firefox 和 Opera 让用户有机会从应用程序的菜单中选择这个“备用”样式表。参见,例如,屏幕截图

来自this article

为了应用该样式表,浏览器需要下载它。

在更一般的rel="alternate"(不是样式表)的情况下,浏览器不会知道与相关链接有关的任何有用信息。因此,就浏览器而言,无需下载。

【讨论】:

  • 感谢您的回复。但是,在上面的示例中指定了 mime 类型并且现代浏览器知道如何处理这一事实如何呢?因此,他们至少可以超链接它以进行导航(例如,在菜单中的某个地方,就像他们使用 CSS 所做的那样,您已经在上面显示了)。所以,我不同意你回答中他们不知道如何处理相关链接的部分。
  • 斯蒂芬,你可能是对的。当我有更多时间时,我会检查 Firefox 解析器的来源并在此处报告。希望有这种知识的人能尽快回复我们。
猜你喜欢
  • 2019-01-03
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-24
  • 2013-10-16
  • 1970-01-01
相关资源
最近更新 更多