JavaScript:完成自己网站的相对URL

时间:2010-02-07 13:18:03

标签: javascript url

有没有更好的方法来编写这个程序来完成我网站的相对网址?

if (!url.startsWith('http')) {
     url = + location.protocol + '//' + location.host + (url.startsWith('/') ? '' : '/') + url 
});

3 个答案:

答案 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"))