我正在使用相当简单的HTML / CSS设置网站。我正在做的一件有点棘手的事情涉及<base>
标签。我希望能够在我的本地文件系统上加载我的网站页面(所以我可以在上传之前轻松地在本地测试网站),当然还有我的实际网站。所以在我的<head>
标签中我添加了类似的内容:
<base href="." />
或
<base href=".." >
此标记的目的是使页面的基本URL成为我网站的根页,无论我是在本地还是通过http:查看页面。然后我的URL总是相对于那个根;链接到名为&#34; support.html&#34;的页面它位于我的网站的根目录中,我可以href="support.html"
,链接到&#34;图像&#34;中的图像。我可以做的根目录中的目录&#34; images / myimg.jpeg&#34;。
这很有效。我已将我的网站上传到我的服务器,我可以浏览我的网页并使用Safari,Chrome和Firefox关注链接;我使用<base>
标签的方式似乎没有任何问题。同时,我可以直接从本地机器上的文件系统打开我的.html文件,看看一切正常。据我所知,我所做的是完全合法的HTML,可能只是略微不合常规。
但W3C Link Validator似乎并不这么认为。它在整个地方都出现了错误,例如:
行:208 /developer.html
状态:400网址必须是绝对的 这通常是服务器无法解析的格式错误的URL的标志。检查链接的语法。
请注意,在第208行,给出的链接为<A HREF="developer.html" target="_blank">
; W3C验证器似乎错误地在其上添加了前导/,而不是使用页面中给出的基本URL。
所以我的问题是:W3C链路验证器完全错了吗?理解<base>
标签是否过于愚蠢,即使它们是合法的HTML?或者,事实上,我正在做的事情有问题,因此我需要修复我的页面(即使它们在我尝试的所有浏览器中都能正常工作)?
请注意,这些不仅仅是警告。他们阻止W3C链接验证器正确测试我的页面链接。事实上,页面上有一个错误的链接,但验证器找不到它,因为它太过于包含在这些中,因此URL必须是绝对的&#34;正确测试链接的问题。
谢谢!哦,如果重要的话,这就是DTD HTML 4.01 Transitional。
答案 0 :(得分:1)
这是一个非常难看的JS解决方案。不能直接回答这个问题,但是#34;会给对话做出贡献&#34;我认为通过为<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所说,spec规定它必须是一条绝对的道路: http://www.w3.org/TR/html4/struct/links.html#edef-BASE