Ось дуже поспішний доказ концепції.
Я впевнений, що є щонайменше два місця, де можуть бути покращення, і я також впевнений, що це не витримає довго в дикій природі. Будь-який відгук, щоб зробити його більш презентабельним або зручним для використання, вітається.
Ключ - це встановлення ідентифікатора для вашого елемента сценарію. Єдина уловка полягає в тому, що це означає, що ви можете викликати скрипт лише один раз, оскільки він шукає цей ідентифікатор для витягування рядка запиту. Це може бути виправлено, якщо натомість скрипт проходить через усі елементи запиту, щоб побачити, чи хтось із них вказує на нього, і якщо так, використовується останній екземпляр такого елемента сценарію. У будь-якому випадку, з кодом:
Викликається сценарій:
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;
};
Сценарій викликається на наступній сторінці:
<script id="myScript" type="text/javascript"
src="test.js?header=Test Page&text=This Works"></script>
<h1 id="docTitle"></h1>
<p id="docText"></p>