Безопасно ли использовать window.location для запроса параметров GET страницы? - PullRequest
3 голосов
/ 20 января 2009

Я делаю рецензирование и нашел людей, использующих window.location.search, чтобы проверить, какие пареметы были отправлены на данную (поисковую) страницу.

Безопасно ли это делать? Я думал, что мы могли бы напечатать параметры в выводе HTML внутри блока скрипта и проверить напечатанные переменные вместо запроса window.location.

Ответы [ 4 ]

12 голосов
/ 20 января 2009

Если включен JavaScript, window.location.search безопасно для использования.

И как некая бесполезная дополнительная информация: насколько я знаю, это свойство было представлено в Netscape Navigator 2 / MS Internet Explorer 3, поэтому я бы сказал, что его использование довольно безопасно, даже если оно не является частью какого-либо стандарт (пока).

1 голос
/ 20 января 2009

Об одном подходе стоит отметить. window.location устанавливается статически при загрузке страницы и не будет обнаруживать изменения, которые пользователь внес в адресную строку после этого времени. Это не должно быть проблемой, но важно знать.

Сохраните следующий код в виде HTML-файла и запустите его в браузере:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <title>test</title>
    </head>
    <body>
        <a href="javascript:void(0);" 
                onclick="alert(window.location);">click me</a>
    </body>
</html>

Якорь "щелкни мне" покажет текущее местоположение окна onclick. Однако если вы добавите что-либо в адресную строку и снова нажмете на ссылку, она сообщит о том же, что и в первый раз.

Надеюсь, это не проблема, и я не могу себе представить, что это повлияет на вас каким-либо образом, но это полезно знать.

1 голос
/ 20 января 2009

Безопасно как в «безопасности» или «будет ли это работать всегда»?

Несмотря на то, что window.location широко распространен, он все еще не является частью стандарта W3C. Однако он был добавлен в рабочий проект спецификации в 2006 году: в основном означает, что браузер может поддерживать его или не поддерживать. Так что из «будет ли это работать всегда», я полагаю, у вас будет небольшой шанс.

0 голосов
/ 21 января 2009

Насколько это безопасно?

Да. Пример кода для получения параметров в виде карты имя-> значения, при условии, что вам не нужно несколько значений для параметра:

function getParameters() {
    var parameters= new Object();
    var parts= window.location.search.substring(1).split('\x26');
    for (var parti= parts.length; parti-->0;) {
        var subparts= parts[parti].split(';'); // support semicolon separators as well as ampersand (see HTML 4.01 section B.2.2)
        for (var subparti= subparts.length; subparti-->0;) {
            var parparts= subparts[subparti].split('=', 2);
            if (parparts.length==2)
                parameters[decodeURIComponent(parparts[0])]= decodeURIComponent(parparts[1]);
        }
   }
   return parameters;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...