JavaScript将相对地址转换为绝对地址示例代码

在看LABjs源代码时,发现里面有个将相对地址转为绝对地址的函数,将其拿出纪录如下:


代码如下:

function canonical_uri(src, base_path)
{
var root_page = /^[^?#]*\//.exec(location.href)[0],
root_domain = /^\w+\:\/\/\/?[^\/]+/.exec(root_page)[0],
absolute_regex = /^\w+\:\/\//;

// is `src` is protocol-relative (begins with // or ///), prepend protocol
if (/^\/\/\/?/.test(src))
{
src = location.protocol + src;
}
// is `src` page-relative? (not an absolute URL, and not a domain-relative path, beginning with /)
else if (!absolute_regex.test(src) && src.charAt(0) != "/")
{
// prepend `base_path`, if any
src = (base_path || "") + src;
}

// make sure to return `src` as absolute
return absolute_regex.test(src) ? src : ((src.charAt(0) == "/" ? root_domain : root_page) + src);
}

如当前页面地址为:http://www.inspurstb.com/hzt/index.html
则canonical_uri("scy.js")返回http://www.inspurstb.com/hzt/scy.js

用Javascript将相对路径地址,转换为绝对路径

1)使用Image, 经测试会发送一个Aborted的请求,并且IE6不支持, 将new Image改成document.createElement_x_x_x('IMG')也是一样的;测试应该不喜欢这个方案;


代码如下:

function getAbsoluteUrl(url){
var img = new Image();
img.src = url; // 设置相对路径给Image, 此时会发送出请求
url = img.src; // 此时相对路径已经变成绝对路径
img.src = null; // 取消请求
return url;
}
getAbsoluteUrl("showroom/list");

2)使用Anchor(链接),不会发出任何请求,只会在加入DOM时产生请求,但是IE6也不支持


代码如下:

function getAbsoluteUrl(url){
var a = document.createElement_x_x_x('A');
a.href = url; // 设置相对路径给Image, 此时会发送出请求
url = a.href; // 此时相对路径已经变成绝对路径
return url;
}
getAbsoluteUrl("showroom/list");

3)使用JavaScript: 实现起来比较复杂,这里有一个例子: https://gist.github.com/1088850

最终使用的是option 2,

由此可变,用原生态的方法访问所有的Image, Anchor时,返回的都是绝对路径,此时如果想返回原来的相对路径,可以用查询DOM的方法,如jQuery的.attr()方法:

console.log($anchor[0]["href"]); //返回绝对路径,jQuery对象实质上都是数组,即使只有一个,因此使用[0]可以访问到原生态的对象,然后取"href";
console.log($anchor.attr("href")); //返回原始路径

(0)

相关推荐

  • js 取消超链接的方法小结

    单个链接取消链接并触发js事件 复制代码 代码如下: <a href="javascript:void(0);" onclick="alert('ok')">测试</a> 批量将网页中的链接取消或重新设置链接的代码: 百度    我们 服务器软件    素材下载 站长查询    脚本下载 function doLinkAll(action){ var arr=document.getElementsByTagName("A"

  • 使用JavaScript修改浏览器URL地址栏的实现代码

    现在的浏览器里,有一个十分有趣的功能,你可以在不刷新页面的情况下修改浏览器URL;在浏览过程中.你可以将浏览历史储存起来,当你在浏览器点击后退按钮的时候,你可以冲浏览历史上获得回退的信息,这听起来并不复杂,是可以实现的,我们来编写些代码.来看看它是如何工作的. 复制代码 代码如下: var stateObject = {};var title = "Wow Title";var newUrl = "/my/awesome/url";history.pushState

  • 让网页上的超链接失效,不能点击的js代码

    让网页上的超链接失效,不能点击 a {poorfish:expression(this.onclick=function kill(){return false})} 我们 www.163.com www.sohu.com [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

  • Ext javascript建立超链接,进行事件处理的实现方法

    1,如何在javasript建立超链接 <script type="text/JavaScript"> //方法一: location.href='网址'; //方法二: document.write('<a href="网址">文字</a>'); </script> 2,应用到Ext中的树控件事件处理 tree_03.js 复制代码 代码如下: Ext.onReady(function(){ var root = n

  • JavaScript asp.net 获取当前超链接中的文本

    <asp:LinkButton ID="BtnBaiyakuNo" runat="server" OnClientClick="openNo(this); return false;" TabIndex="0" /> function openNo(sender) { var linkNo = sender.toString().split("'")[1].replace(/\$/g,"

  • js修改地址栏URL参数解决url参数问题

    现在做网页,经常会碰到处理地址栏参数的问题,但一直是凭感觉做,之后漏洞百出也不知道从哪改起,因此,就专门做了一个修改地址栏参数的方法,这一下,就再也不用愁啦,哈哈! 以下就是我编的方法,使用很简单的哦: 复制代码 代码如下: function changeURLPar(destiny, par, par_value) { var pattern = par+'=([^&]*)'; var replaceText = par+'='+par_value; if (destiny.match(pat

  • js实现a标签超链接提交form表单的方法

    本文实例讲述了js实现a标签超链接提交form表单的方法.分享给大家供大家参考.具体实现方法如下: <form action="/home/search" method="get" id="search_form"> <div class="searchBox png" id="searchBox"> <input type="text" id="

  • javascript/jquery获取地址栏url参数的方法

    使用jquery获取url以及使用jquery获取url参数是我们经常要用到的操作 1.jquery获取url很简单,代码如下 复制代码 代码如下: window.location.href; 其实只是用到了javascript的基础的window对象,并没有用jquery的知识 2.jquery获取url参数比较复杂,要用到正则表达式,所以学好javascript正则式多么重要的事情 首先看看单纯的通过javascript是如何来获取url中的某个参数 复制代码 代码如下: function

  • JS获取几种URL地址的方法小结

    以下为JS获取几种URL地址的方法 复制代码 代码如下: thisURL = document.URL;thisHREF = document.location.href;thisSLoc = self.location.href;thisDLoc = document.location; thisTLoc = top.location.href;thisPLoc = parent.document.location;thisTHost = top.location.hostname;thisH

  • 巧方法 JavaScript获取超链接的绝对URL地址

    对于Web程序员来说,处理简单的URL格式也许会成为一场噩梦.试想一下,一个网址里有很多组成部分都会影响你对它的解析方法: ····是否以/字符开头 ····是否以//开头 ····是否以?号开头 ····是否以#号开头 -等等 当你想要这个地址的绝对地址时,如何判断处理和解析?它有可能是http协议的,还可能是https协议的.够头痛吧.幸运的是,我们有个简单的方法来确定它的绝对地址,就是创建一个A元素来辅助完成这个任务! JavaScript代码 这里我将使用一个返回函数的JavaScrip

随机推荐