Есть ли в Javascript аналог переменной __FILE__ в PHP?

Довольно просто, у меня есть JS-скрипт, который включен на многих сайтах и ​​нуждается в передаче параметров.

Было бы полезно, если бы они могли быть переданы через URL, например:

<script type="text/javascript" 
    src="http://path.to/script.js?var1=something&var2=somethingelse"></script>

Да, вы по-прежнему можете предварительно заполнять переменные в отдельном теге сценария, но это смутный вид и его легче обойти:

<script type="text/javascript">var1=something; var2=somethingelse</script>
<script type="text/javascript" src="http://path.to/script.js"></script>

4 ответа

Решение

error.fileName сообщит вам файл, из которого создан скрипт (не уверен, работает ли он в каждом браузере; я проверял его в Firefox & Opera)

var filename = (new Error).fileName;

Ага. Дополнительный бонус: я конвертирую параметры строки запроса в более удобный хэш javascript.

HTML:

<script src="script.js?var1=something&var2=somethingelse" type="text/javascript"></script>

script.js:

var scriptSource = (function() {
    var scripts = document.getElementsByTagName('script');
    return scripts[scripts.length - 1].src
}());

var params = parseQueryString(scriptSource.split('?')[1]);

params.var1; // 'something'
params.var2; // 'somethingelse'

// Utility function to convert "a=b&c=d" into { a:'b', c:'d' }
function parseQueryString(queryString) {
    var params = {};
    if (queryString) {
        var keyValues = queryString.split('&');
        for (var i=0; i < keyValues.length; i++) {
            var pair = keyValues[i].split('=');
            params[pair[0]] = pair[1];
        }
    }
    return params;
}

Этот метод следует использовать только в том случае, если переменные будут определять, какой код JavaScript был загружен (например, при обработке запроса PHP, динамическом построении файла JS).

Если вы хотите передать информацию в код JavaScript, используйте функции или переменные в коде после его загрузки.

Чтобы сделать что-то подобное, вам нужно использовать язык на стороне сервера, чтобы сделать JS для вас.

Я бы не рекомендовал это.

Другие вопросы по тегам