巧はJavascriptを用いて相対パスアドレスを絶対パスに変換する.
5896 ワード
ここで紹介しているのは本質的には二つの方法です.DOMを作成するか、あるいはJavaScriptを通じて計算します.
1)新たに作成されたImageを通じて、テスト後にAbortedの要求を送信します.そして、IE 6はサポートしていません.new Imageをdocument.creat Element('IMG')に変更するのも同じです.テストはこの方案が好きではないはずです.
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19.
20
21
22
23
24.
25
26
27.
28
29
30
31
32
33
34
35
36
37
38.
39
40
41
42
43
44
これから分かるように、元の生態の方法ですべてのImageにアクセスして、Ancherの時に戻ってくるのはすべて絶対パスで、この時元の相対パスに戻りたいなら、DOMを調べる方法を使って、jQuery.atr()のような方法があります.
1
2
3
4
1)新たに作成されたImageを通じて、テスト後にAbortedの要求を送信します.そして、IE 6はサポートしていません.new Imageをdocument.creat Element('IMG')に変更するのも同じです.テストはこの方案が好きではないはずです.
1
2
3
4
5
6
7
8
9
function
getAbsoluteUrl(url){
var
img =
new
Image();
img.src = url;
// Image,
url = img.src;
//
img.src =
null
;
//
return
url;
}
getAbsoluteUrl(
"showroom/list"
);
2)Ancher(リンク)を作成し、この方法は要求を出さない(DOM加入時に要求が生じる)が、IE 6はサポートしない.1
2
3
4
5
6
7
8
function
getAbsoluteUrl(url) {
var
a = document.createElement(
'A'
);
a.href = url;
// Image,
url = a.href;
//
return
url;
}
getAbsoluteUrl(
"showroom/list"
);
3)JavaScriptを使用する:実現が複雑で、ここには一例があります. https://gist.github.com/10888501
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19.
20
21
22
23
24.
25
26
27.
28
29
30
31
32
33
34
35
36
37
38.
39
40
41
42
43
44
/*jslint regexp: true, white: true, maxerr: 50, indent: 2 */
function
parseURI(url) {
var
m = String(url).replace(/^\s+|\s+$/g,
''
).match(/^([^:\/?
#]+:)?(\/\/(?:[^:@]*(?::[^:@]*)?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/);
// authority = '//' + user + ':' + pass '@' + hostname + ':' port
return
(m ? {
href : m[0] ||
''
,
protocol : m[1] ||
''
,
authority: m[2] ||
''
,
host : m[3] ||
''
,
hostname : m[4] ||
''
,
port : m[5] ||
''
,
pathname : m[6] ||
''
,
search : m[7] ||
''
,
hash : m[8] ||
''
} :
null
);
}
function
absolutizeURI(base, href) {
// RFC 3986
function
removeDotSegments(input) {
var
output = [];
input.replace(/^(\.\.?(\/|$))+/,
''
)
.replace(/\/(\.(\/|$))+/g,
'/'
)
.replace(/\/\.\.$/,
'/../'
)
.replace(/\/?[^\/]*/g,
function
(p) {
if
(p ===
'/..'
) {
output.pop();
}
else
{
output.push(p);
}
});
return
output.join(
''
).replace(/^\
//, input.charAt(0) === '/' ? '/' : '');
}
href = parseURI(href ||
''
);
base = parseURI(base ||
''
);
return
!href || !base ?
null
: (href.protocol || base.protocol) +
(href.protocol || href.authority ? href.authority : base.authority) +
removeDotSegments(href.protocol || href.authority || href.pathname.charAt(0) ===
'/'
? href.pathname : (href.pathname ? ((base.authority && !base.pathname ?
'/'
:
''
) + base.pathname.slice(0, base.pathname.lastIndexOf(
'/'
) + 1) + href.pathname) : base.pathname)) +
(href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) +
href.hash;
}
私達の製品は携帯端末のホームページですので、すでにIE 6をサポートしていません.最終的に使うのは第二の案です.これから分かるように、元の生態の方法ですべてのImageにアクセスして、Ancherの時に戻ってくるのはすべて絶対パスで、この時元の相対パスに戻りたいなら、DOMを調べる方法を使って、jQuery.atr()のような方法があります.
1
2
3
4
// ,jQuery " " ( arguments), [0] , "href";
console.log($anchor[0][
"href"
]);
//
console.log($anchor.attr(
"href"
));