Oto bardzo pospieszny dowód słuszności koncepcji.
Jestem pewien, że są co najmniej 2 miejsca, w których można wprowadzić ulepszenia, i jestem też pewien, że nie przetrwało to długo na wolności. Mile widziane są wszelkie uwagi, które sprawią, że będzie on bardziej reprezentacyjny lub użyteczny.
Kluczem jest ustawienie identyfikatora dla elementu skryptu. Jedynym haczykiem jest to, że oznacza to, że możesz wywołać skrypt tylko raz, ponieważ szuka on tego identyfikatora, aby pobrać ciąg zapytania. Można to naprawić, gdyby zamiast tego skrypt przechodził przez wszystkie elementy zapytania, aby sprawdzić, czy któryś z nich do niego wskazuje, a jeśli tak, używa ostatniej instancji takiego elementu skryptu. Tak czy inaczej, z kodem:
Wywoływany skrypt:
window.onload = function() {
//Notice that both possible parameters are pre-defined.
//Which is probably not required if using proper object notation
//in query string, or if variable-variables are possible in js.
var header;
var text;
//script gets the src attribute based on ID of page's script element:
var requestURL = document.getElementById("myScript").getAttribute("src");
//next use substring() to get querystring part of src
var queryString = requestURL.substring(requestURL.indexOf("?") + 1, requestURL.length);
//Next split the querystring into array
var params = queryString.split("&");
//Next loop through params
for(var i = 0; i < params.length; i++){
var name = params[i].substring(0,params[i].indexOf("="));
var value = params[i].substring(params[i].indexOf("=") + 1, params[i].length);
//Test if value is a number. If not, wrap value with quotes:
if(isNaN(parseInt(value))) {
params[i] = params[i].replace(value, "'" + value + "'");
}
// Finally, use eval to set values of pre-defined variables:
eval(params[i]);
}
//Output to test that it worked:
document.getElementById("docTitle").innerHTML = header;
document.getElementById("docText").innerHTML = text;
};
Skrypt wywołany przez następującą stronę:
<script id="myScript" type="text/javascript"
src="test.js?header=Test Page&text=This Works"></script>
<h1 id="docTitle"></h1>
<p id="docText"></p>