Есть ли в Javascript аналог переменной __FILE__ в PHP? - PullRequest
6 голосов
/ 30 июля 2009

Довольно просто, у меня есть 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 ]

4 голосов
/ 30 июля 2009

Да. Дополнительный бонус: я преобразую параметры строки запроса в более удобный хэш 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;
}
2 голосов
/ 30 июля 2009

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

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

1 голос
/ 30 июля 2009

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

var filename = (new Error).fileName;
0 голосов
/ 30 июля 2009

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

Я бы не советовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...