html - 为什么 W3C 链接验证器给出 "400 URL must be absolute"?

标签 html css

我正在使用非常简单的 HTML/CSS 建立一个网站。我正在做的一件有点棘手的事情涉及 <base>标签。我希望能够在我的本地文件系统上加载我的网站页面(这样我可以在上传之前轻松地在本地测试网站),当然也可以从我的实际网站上加载。所以在我的<head>标签我放了类似的东西:

<base href="." />

<base href=".." >

此标记的目的是使页面的基本 URL 成为我网站的根页面,无论我是在本地还是通过 http: 查看该页面。那么我的 URL 总是相对于那个根;要链接到位于我网站根目录中的名为“support.html”的页面,我可以做 href="support.html" , 要链接到该根目录内“图像”目录中的图像,我可以执行“图像/myimg.jpeg”。

这很好用。我已将我的网站上传到我的服务器,我可以使用 Safari、Chrome 和 Firefox 浏览我的页面并点击链接;所有三种浏览器似乎都对我使用 <base> 的方式没有问题。标签。同时,我可以直接从本地机器上的文件系统打开我的一个 .html 文件,一切正常。据我所知,我正在做的是完全合法的 HTML,只是可能有点不合常规。

但是 W3C Link Validator 似乎并不这么认为。它吐得满地都是错误,例如:

Line: 208 /developer.html
Status: 400 URL must be absolute
This is usually the sign of a malformed URL that cannot be parsed by the server. Check the syntax of the link.

请注意,在第 208 行给出的链接是 <A HREF="developer.html" target="_blank"> ; W3C 验证器似乎错误地在其前面添加了前导/,而不是使用页面中给出的基本 URL。

所以我的问题是:W3C 链接验证器是否完全错误?是不是太笨了看不懂<base>标签,即使它们是合法的 HTML?或者事实上,我正在做的事情有问题,以至于我需要修复我的页面(即使它们在我尝试过的所有浏览器中都能正常工作)?

请注意,这些不仅仅是警告。他们阻止 W3C 链接验证器正确测试我的页面链接。事实上,页面上有一个错误的链接,但验证器没有找到它,因为它被这些“URL 必须是绝对的”问题所包围,无法正确测试链接。

谢谢!哦,如果重要的话,这是 DTD HTML 4.01 Transitional。

最佳答案

这是一个非常丑陋的 JS 解决方案。不直接回答问题,但我认为通过提供与 <base> 等效的功能来“为对话做出贡献”

window.onload=function () {
    var baseURL="..";
    var a=document.getElementsByTagName('a');
    for (link in a) {
        if (isRelative(a[link].href)) {
            a[link].href=baseURL+"/"+a[link].href;
       }
    }
};       

function isRelative(url) {
    var r = new RegExp('^(?:[a-z]+:)?//', 'i');
    return r.test(url);
}

参见:How to test if a URL string is absolute or relative?

因为,正如@alohci 所说,规范规定它必须是绝对路径: http://www.w3.org/TR/html4/struct/links.html#edef-BASE

关于html - 为什么 W3C 链接验证器给出 "400 URL must be absolute"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28650377/

相关文章:

html - 背景图像获取 "zoomed in"

javascript - 如何重叠图像

jquery - 替代宽度/高度 : 0px

jquery - 在光标(或单击的元素)位置创建 CSS 箭头?

c# - sql语法错误,以及与sql语法相关的字符串问题

html - 阿拉伯语数据未在 ie8 中显示

javascript - 如何制作圆形的 Jquery UI 工具提示?

javascript - 如何结合滚动效果和鼠标移动

html - 输入或文本区域中带有边框半径的背景图像

html - 多个框相同的高度