私のHTMLファイルでは、JSに次のようにリンクしています。
src="myscript.js?config=true"
私の JS は、この var の値をこのように直接読み取ることができますか?
alert (config);
これは機能せず、FireFox エラー コンソールに「構成が定義されていません」と表示されます。JS ファイルの src 属性を介して渡された変数を読み取るにはどうすればよいですか? こんなに簡単なの?
私のHTMLファイルでは、JSに次のようにリンクしています。
src="myscript.js?config=true"
私の JS は、この var の値をこのように直接読み取ることができますか?
alert (config);
これは機能せず、FireFox エラー コンソールに「構成が定義されていません」と表示されます。JS ファイルの src 属性を介して渡された変数を読み取るにはどうすればよいですか? こんなに簡単なの?
<script>
var config=true;
</script>
<script src="myscript.js"></script>
試した方法でJSに変数を渡すことはできません。SCRIPTタグは、(クエリ文字列を持つ)Windowオブジェクトを作成せず、サーバー側のコードではありません。
はい、できますが、スクリプト内の正確なスクリプトファイル名を知っている必要があります。
var libFileName = 'myscript.js',
scripts = document.head.getElementsByTagName("script"),
i, j, src, parts, basePath, options = {};
for (i = 0; i < scripts.length; i++) {
src = scripts[i].src;
if (src.indexOf(libFileName) != -1) {
parts = src.split('?');
basePath = parts[0].replace(libFileName, '');
if (parts[1]) {
var opt = parts[1].split('&');
for (j = opt.length-1; j >= 0; --j) {
var pair = opt[j].split('=');
options[pair[0]] = pair[1];
}
}
break;
}
}
これで、引数が渡された'options'変数ができました。テストはしていません。動作するhttp://code.google.com/p/canvas-text/source/browse/trunk/canvas.text.jsから少し変更しました。
これが行われているのを見たことがあるかもしれませんが、実際にはJSファイルは最初にPHPまたは他の言語を使用してサーバー側で前処理されています。サーバー側のコードは、変数が設定されたJavaScriptを印刷/エコーします。私は以前にスクリプト化された広告サービスがこれを行うのを見たことがあり、それがプレーンなol'jsで実行できるかどうかを調べるようになりましたが、できません。
スクリプトのsrc属性を検索し、「?」の後の変数を解析するには、Javascriptを使用する必要があります。Prototype.jsフレームワークを使用すると、次のようになります。
var js = /myscript\.js(\?.*)?$/; // regex to match .js
var jsfile = $$('head script[src]').findAll(function(s) {
return s.src.match(js);
}).each(function(s) {
var path = s.src.replace(js, ''),
includes = s.src.match(/\?.*([a-z,]*)/);
config = (includes ? includes[1].split('=');
alert(config[1]); // should alert "true" ??
});
私のJavascript/RegExスキルは錆びていますが、それが一般的な考え方です。scriptaculous.jsファイルから直接リッピングしました!
ただし、スクリプトは独自のスクリプトノードを見つけて、src属性を調べ、必要な情報を抽出できます。
var scripts = document.getElementsByTagName ('script');
for (var s, i = scripts.length; i && (s = scripts[--i]);) {
if ((s = s.getAttribute ('src')) && (s = s.match (/^(.*)myscript.js(\?\s*(.+))?\s*/))) {
alert ("Parameter string : '" + s[3] + "'");
break;
}
}
これを行うべきかどうかは公正な質問ですが、それを行いたい場合は、http://feather.elektrum.org/book/src.htmlが実際にその方法を示しています。スクリプトタグをレンダリングするときにブラウザがブロックすると仮定すると(現在はtrueですが、将来にわたって利用できるとは限りません)、問題のスクリプトは常にその時点までのページの最後のスクリプトです。
次に、jQueryやhttp://plugins.jquery.com/project/parseQueryなどのフレームワークとプラグインを使用すると、これは非常に簡単になります。驚いたことに、まだプラグインがありません。
John Resigの劣化スクリプトタグはある程度関連していますが、初期化の一部としてではなく、外部スクリプトの後にコードを実行します:http: //ejohn.org/blog/degrading-script-tags/
クレジット:JavaScriptファイルへのパラメーターの受け渡し、JavaScriptファイルへのパラメーターの受け渡し