Обновить случайное число в css href

У меня есть тег ссылки css в моем html, как это

<link rel = "stylesheet" href = "skin.css">

Я хочу добавить случайное число, сохраненное в локальном хранилище, в href, как показано ниже.

<link rel = "stylesheet" href = "skin.css?cb=sessionStorage.cbVersion">

Я знаю, что мы можем присвоить этому идентификатор, а затем изменить значение атрибута href, но я пытаюсь найти способ реализовать то же самое без написания дополнительной логики.

получите эти случайные числа и поиграйте с таким javascript $('head').append('<link rel = "stylesheet" type = "text/css" href = "'skin.css?cb=sessionStorage.' + randomFileNumber + '.css'>");

Abdul Basit 05.04.2019 09:40
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
1
324
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

CSS является статическим. Например: он всегда будет анализировать значение атрибута href как строку. Итак, учитывая вышеизложенное, он попытается получить доступ к {your-domain}/skin.css?cb=sessionStorage.cbVersion.

Если вам нужно, чтобы он был переменным, у вас есть два варианта:

  • используйте любую логику, которая вам нужна, когда вы создаете HTML своей страницы на стороне сервера, используя язык, который вы используете на стороне сервера (php, Java и т.д...)
  • использовать JavaScript на стороне клиента (когда страница была загружена в браузере).

Во втором случае вам не нужно использовать id, хотя это распространенный (и рекомендуемый) метод нацеливания на элементы. Но вам нужен способ уникальной идентификации вашего элемента, чтобы вы могли изменить его href.

Простой пример:

<link rel = "stylesheet" data-href = "dynamic-stylesheet">
<script>
  const link = document.querySelector('link[data-href = "dynamic-stylesheet"]');
  link.href = `skin.css?cb=${sessionStorage.cbVersion || 'defaultValue'}`;
</script>

Обратите внимание, что это не будет работать в StackOverflow, так как фрагменты изолированы и не имеют доступа к sessionStorage.

Также обратите внимание, что я полностью удалил href, поскольку, если он присутствует и недействителен, это приведет к ошибке 404, поскольку он будет проанализирован в момент анализа <link>, что должно быть до запуска вашего скрипта. Или, как вариант, можно вообще не иметь <link> и создать его с помощью JavaScript с желаемым значением href.

И последнее, но не менее важное: вы всегда должны указывать значение по умолчанию, когда cbVersion не найден в sessionStorage. Улучшенная версия приведенного выше скрипта будет использовать try/catch для получения значения sessionStorage и предоставлять defaultValue, если результирующее значение все еще ложно:

<link rel = "stylesheet" data-href = "dynamic-stylesheet">
<script>
  const link = document.querySelector('link[data-href = "dynamic-stylesheet"]');
  let cbVersion;
  try {
    cbVersion = sessionStorage.cbVersion;
  } catch(err) { 
    //console.info(err)
  }
  link.href = `skin.css?cb=${cbVersion || 'defaultValue'}`;
</script>

Как видите, приведенный выше код пытается загрузить https://stacksnippets.net/skin.css?cb=defaultValue (которого не существует) и не выводит ошибку о невозможности доступа к sessionStorage на SO.

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