function execute() {
var d = document; //効率化用
//scriptタグを配列で取得
var scripts;
if (d.getElementsByTagName)
scripts = d.getElementsByTagName("script");
else if (d.scripts)
scripts = d.scripts;
else if (d.all && d.all.tags)
scripts = d.all.tags("script");
//取得できなかったら却下
if (!scripts) {
document.write("非対応ブラウザです");
return;
}
var script = scripts[scripts.length -1]; //読みこみ中に実行されるので、最後のscriptが自分自身を表す
var src = script.src; //自分自身のsrc属性(ここに引数も含まれる)
var query = new Object(); //連想配列を作成([]だとN3でエラー)
var pear, pears; //temp
//この辺のブロックはcookieの処理にも効果的
if (src && src.indexOf("?") != -1) { //src属性があり、さらに?が含まれていたら
src = src.substring(src.indexOf("?") +1); //?以降を全部取得(?は含まず)
pears = src.split(";"); //引数の区切り文字( ; )で区切って配列へ分割
for (var i = 0; i < pears.length; i++) { //引数の数だけループ
pear = pears[i].split("="); //さらに = で区切って配列へ分割
query[pear[0]] = pear[1]; //query["test1"] = "aiueo"; となる
}
}
//これで引数の取得は完了
document.write("呼び出された<script>
のsrc属性の値
src="" + script.src + ""
");
//queryに含まれる引数を全部書きだし
for (var prop in query)
document.write("引数" + prop + "
の値は" + query[prop] + "
");
return; //このサンプルはここで終わり
//実際には以下のように if else で分岐して関数を実行させるのが現実的かも
if (query["test1"]) //test1があったら
myFunc1();
if (query["test2"] == "abcde") //test2の値が"abcde"だったら
myFunc2();
if (query["arg1"] == "12345" && query["test3"]) //arg1の値が"12345"であり、かつtest3があったら
myFunc3(query["test3"]); //test3の値を引数にする
}
execute();