Подтвердить что ты не робот

Как получить значение строки запроса из script пути?

Я добавляю свой файл Javsacript на страницах с различными строками запроса в пути script следующим образом:

Page1:

<script type="text/javascript" src="file.js?abc=123"></script>

Стр .2:

<script type="text/javascript" src="file.js?abc=456"></script>

Page3:

<script type="text/javascript" src="file.js?abc=789"></script>

В моем файле Javascript, как я могу получить значение параметра "abc"? Я попытался использовать window.location для этого, но это не работает.

В случае, если это помогает, ниже функция, которую я использую, чтобы найти значение параметра строки запроса:

function getQuerystring(key, defaultValue) {
    if (defaultValue == null) defaultValue = "";
    key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regex = new RegExp("[\\?&]" + key + "=([^&#]*)");
    var qs = regex.exec(window.location.href);
    if (qs == null)
        return defaultValue;
    else
        return qs[1];
}
4b9b3361

Ответ 1

Это возможно. См. Передача аргументов JavaScript через атрибут src. Перспективной является то, что, поскольку скрипты в HTML (не XHTML) выполняются как загруженные, это позволит script найти себя, поскольку он всегда является последним script на странице, когда его срабатывает -

var scripts = document.getElementsByTagName('script');
var index = scripts.length - 1;
var myScript = scripts[index];
// myScript now contains our script object
var queryString = myScript.src.replace(/^[^\?]+\??/,'');

Затем вы просто применяете синтаксический анализ строки запроса.

Ответ 2

Во-первых, технический ответ: если вы назначили свой тег script идентификатором, вы можете захватить его src и затем проанализировать строку запроса.

<script id="whatever" type="text/javascript" src="file.js?abc=123"></script>

 

var path = document.getElementById('whatever').src;
// ...

С учетом этого я хотел бы рассказать о своей озабоченности; это пахнет плохими проектными решениями. Почему вы включаете свой script таким образом (с помощью querystring)? Если вы пытаетесь оптимизировать свой сайт (имея один большой script, который может быть кэширован для последующих страниц), этот подход действительно контрпроизводительный, потому что браузеры сделают новый запрос для script на каждой странице из-за различной строки запроса. Правильный подход состоит в том, чтобы иметь один большой общий файл, а затем небольшой файл для каждой страницы.

Ответ 3

У меня есть быстрое и простое решение для извлечения строки запроса из js файла с помощью jQuery, чтобы захватить атрибут источника тега script и просто использовать две отдельные функции для разбора пути JS файла и строки запроса. Очевидно, что требуется jQuery.

$(document).ready(function() {

    var p = parseURL($('script[src*="thisfile.js"]').attr('src'));

    console.log(p);

});

// Parse a URL into its parts
function parseURL(url)
{
    var p = document.createElement('a');

    p.href = url;

    var obj = {
        'protocol' : p.protocol,
        'hostname' : p.hostname,
        'port' : p.port,
        'pathname' : p.pathname,
        'search' : p.search,
        'query' : p.search.substring(1),
        'args' : parseStr(p.search.substring(1)),
        'hash' : p.hash,
        'host' : p.host
    };

    return obj;
}

// Parse a query string
function parseStr(string)
{
    var args = string.split('&');
    var argsParsed = {};

    for (i = 0; i < args.length; i++)
    {
        var arg = decodeURIComponent(args[i]);

        if (arg.indexOf('=') == -1)
        {
            argsParsed[arg.trim()] = true;
        }
        else
        {
            var kvp = arg.split('=');
            argsParsed[kvp[0].trim()] = kvp[1].trim();
        }
    }

    return argsParsed;
}