[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ただいまコメントを受けつけておりません。
ユーザにあまり情報を入れさせることなく、ユーザ毎に見えるページを分けたい、ということがある。この場合の選択肢として URI の Query を利用する、という手が考えられる。 (使える場面は限定されるし、本来はログインさせてユーザページとして見せるべきなのかもしれないが)
URL は次のような構造になっている (http://tools.ietf.org/html/rfc3986 から引用)。
foo://example.com:8042/over/there?name=ferret#nose
\_/ \______________/\_________/ \_________/ \__/
| | | | |
scheme authority path query fragment
| _____________________|__
/ \ / \
urn:example:animal:ferret:nose
この Query 部分にページに与える引数を与え、ページを開いた際に利用する、という使われ方がされる。例えば https://www.google.co.jp/search?q=ひよことすれば ひよこ で検索することができる。
今回はこの Query パートを JavaScript で取得することを考える。
Query は一般に key と value を = でペアにしたものを & でつないだものである。例えば次のようになる。
?age=22&sex=m&name=koneko
この場合、次のような連想配列のように考えることができる。
{
age: '22',
sex: 'm',
name:'koneko'
}
このような結果を得られるものを目指す。
var com = com || {};
com.hiyoko = com.hiyoko || {};
/**
* URL の Query 部分を取得する関数
* @param {Object.<string, string>} Query の連想配列
*/
com.hiyoko.getQueries = function() {
var params = ((location.search).slice(1)).split('&');
var paramLength = params.length;
var result = {};
for(var i = 0; i < paramLength; i++){
var pair = params[i].split('=');
result[pair[0]] = pair[1];
}
return result;
};
// Usage
var queries = com.hiyoko.getQueries();
// URL が ~?search_words=ひよこ&type=image ならば
// ひよこ が console に出力される
console.log('Search Word = ' + queries['search_words']);
Query パートは次のようなルールで書かれる。
上ではさも Query は key=value の形式で記述され、複数個使うときは & でつなぐかのように書いたが、実際のところ Query は次のように言われている。as query components are often used to carry identifying information in the form of "key=value" pairs
(RFC 3986 Section 3.4 Query)、日本語にすればしばしば Query は識別するための情報を扱うために key=value の形式をとる
である (原文ではこの後、それを考慮した扱われ方をするとよい、というような話が続く)。しばしば、であり、常に、ではない点には注意しなければならないかもしれない。
どうしようもない。例えば、 ~?b=d&c&e=f といった場合、判断のしようがない。もしも & を入れたければパーセントエンコーディング (RFC 3986 Section 2.1 Percent-Encoding)してくれることを期待する。
T. Berners-Lee, R. Fielding, and L. Masinter. RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax. http://tools.ietf.org/html/rfc3986, 2005
ただいまコメントを受けつけておりません。