有没有更好的方法来编写这个程序来完成我网站的相对网址?
if (!url.startsWith('http')) {
url = + location.protocol + '//' + location.host + (url.startsWith('/') ? '' : '/') + url
});
答案 0 :(得分:0)
首先可以有例如ftp://
您应该检查网址中是否有//。
而不是'location.host'你应该使用'location'来切掉最后一个字:“/”。我的意思是www.page.com/file.html - > www.page.com
答案 1 :(得分:0)
您可能需要考虑让服务器端为您的网站提供基本网址。原因是,通常更容易访问服务器上站点的基本URL。您需要做的就是使用服务器端脚本/操作来生成如下所示的脚本:
var siteBaseUrl = 'http://example.com/';
// use string replacement to remove any leading slash on the incoming url.
function makeAbsoluteUrl( url )
{
if (!url.match(/^http/)) {
url = siteBaseUrl + url.replace(/^\//,'');
})
return url;
}
您可以在网页中将其引用为:
<script type="text/javscript" src="/scripts/baseUrl.php"> // adjust for platform
</script>
并将其用作
url = makeAbsoluteUrl( url );
答案 2 :(得分:0)
我认为以下内容可以正确处理所有可能的网址
lstrip = function(str, prefix) {
return str.indexOf(prefix) == 0 ?
str.substring(prefix.length) :
str;
}
completeURL = function(url, host) {
url = lstrip(url, "http://");
url = lstrip(url, host);
url = lstrip(url, "/");
return "http://" + host + "/" + url
}
//test
urls = [
"http://host.com/foo/bar",
"host.com/foo/bar",
"/foo/bar",
"foo/bar",
"foo.php",
"host.com",
""
]
for(var n = 0; n < urls.length; n++)
console.log(completeURL(urls[n], "host.com"))