Dưới đây là một bằng chứng rất vội vàng của khái niệm.
Tôi chắc chắn có ít nhất 2 nơi có thể cải thiện và tôi cũng chắc chắn rằng điều này sẽ không tồn tại lâu trong tự nhiên. Bất kỳ thông tin phản hồi để làm cho nó dễ trình bày hơn hoặc có thể sử dụng được hoan nghênh.
Chìa khóa là thiết lập id cho thành phần script của bạn. Điều hấp dẫn duy nhất là điều này có nghĩa là bạn chỉ có thể gọi tập lệnh một lần vì nó tìm ID đó để kéo chuỗi truy vấn. Điều này có thể được sửa nếu, thay vào đó, tập lệnh lặp qua tất cả các phần tử truy vấn để xem liệu có bất kỳ phần tử nào trỏ đến nó không, và nếu vậy, sử dụng phiên bản cuối cùng của phần tử tập lệnh đó. Dù sao, với mã:
Kịch bản được gọi là:
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 được gọi thông qua trang sau:
<script id="myScript" type="text/javascript"
src="test.js?header=Test Page&text=This Works"></script>
<h1 id="docTitle"></h1>
<p id="docText"></p>