2010年 2月 6

location.URLなどから取得するのではなく、例えば下記ページのような事を行う関数。

javascriptでURLクエリで、変数を受け取ることはできないでしょうか?
http://q.hatena.ne.jp/1179844292

<script src=”sample.js?key1=value1&key2=value2″></script>

などでクエリー(Javascriptではそう呼ばない??)を取得する。
注意点としては日本語等マルチバイトの文字をvalueにセットするには、URLエンコードしないとだめかも。
(呼び出し元のHTMLがUTF-8だとうまくいったけど。。。)

var getQueryStrings = function (){

    // scriptタグからリクエストされたURIを取得し、クエリー(?以降の部分)を抜き出す
    var script = document.getElementsByTagName( 'script' );
    var request = script[script.length-1].src;
    var query =( request.match(/\?(.+)$/) )[1]; //配列に代入されるため[1]の要素を代入

    //
    var pairs = query.split(/&/);
    var form={};
    for (var i in pairs){
        var val = pairs[i].split(/=/);
        form[decodeURI(val[0])] = decodeURI(val[1]);
    }
return form;
};

使い方は
var form = getQueryStrings();
とするとform にハッシュとして代入される。

form[“key1”]やform[“key2”]のように。
だいたい form.key1 form.key2 でも大丈夫だと思うけど、key1が数字の場合うまくいかないので注意。
例)sample.js?1=val1&2=val2

なんでこんな事するのかというと、以前はCGIでJavascriptを書き出していたので perl.cgi?k=aaa&〜 と、していた。そのスクリプトをJavascriptとして置き換えるのにURIの変更を(ほぼ)せずに行いたかったので。
こうしないとパラメーターを渡すのにscriptタグの変更が必要なので。

More from my site


Filed under: JavaScript

Trackback Uri



コメントする