巧はJavascriptを用いて相対パスアドレスを絶対パスに変換する.

5896 ワード

ここで紹介しているのは本質的には二つの方法です.DOMを作成するか、あるいはJavaScriptを通じて計算します.
1)新たに作成されたImageを通じて、テスト後にAbortedの要求を送信します.そして、IE 6はサポートしていません.new Imageをdocument.creat Element('IMG')に変更するのも同じです.テストはこの方案が好きではないはずです.
1
2
3
4
5
6
7
8
9functiongetAbsoluteUrl(url){    varimg = newImage();    img.src = url;  // Image,     url = img.src;  //     img.src = null; //     returnurl;} getAbsoluteUrl("showroom/list");2)Ancher(リンク)を作成し、この方法は要求を出さない(DOM加入時に要求が生じる)が、IE 6はサポートしない.
1
2
3
4
5
6
7
8functiongetAbsoluteUrl(url) {    vara = document.createElement('A');    a.href = url;  // Image,     url = a.href;  //     returnurl;} getAbsoluteUrl("showroom/list");3)JavaScriptを使用する:実現が複雑で、ここには一例があります.  https://gist.github.com/1088850
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/*jslint regexp: true, white: true, maxerr: 50, indent: 2 */ functionparseURI(url) {  varm = 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);} functionabsolutizeURI(base, href) {// RFC 3986   functionremoveDotSegments(input) {    varoutput = [];    input.replace(/^(\.\.?(\/|$))+/, '')         .replace(/\/(\.(\/|$))+/g, '/')         .replace(/\/\.\.$/, '/../')         .replace(/\/?[^\/]*/g, function(p) {      if(p === '/..') {        output.pop();      } else{        output.push(p);      }    });    returnoutput.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"));