# Сброс кэша для обновленных скриптов в компонентах темы?

**URL:** <https://meta.discourse.org/t/cache-busting-for-updated-scripts-in-theme-components/243036>\
**Category:** Development\
**Created:** [27.Октябрь.2022 02:29:32 UTC](https://meta.discourse.org/t/cache-busting-for-updated-scripts-in-theme-components/243036 "2022-10-27T02:29:32Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![rahim123](https://avatars.discourse-cdn.com/v4/letter/r/df705f/32.png) [@rahim123](https://meta.discourse.org/u/rahim123)\
**Post date:** [27.Октябрь.2022 02:29:32 UTC](https://meta.discourse.org/t/cache-busting-for-updated-scripts-in-theme-components/243036/1 "2022-10-27T02:29:32Z")

</div>

Привет! Подскажите, пожалуйста, какие существуют варианты для обновления кэшированного JavaScript в сессиях браузера пользователей, когда я изменяю URL изображений и/или ссылки в теге `<href>` в этом скрипте, который добавляется как пользовательский HTML в секцию **Head** нового компонента темы:

> [@How to use api.onPageChange with api.createWidget?](https://meta.discourse.org/t/how-to-use-api-onpagechange-with-api-createwidget/242744/4):
>
> Brilliant! Thanks so much, I never would have figured that out! Here’s the complete Head code for the theme component: \<script type="text/discourse-plugin" version="0.8"\> const h = require("virtual-dom").h; api.createWidget("top-banner-widget", { tagName: "div.top-banner", html() { let Number = Math.round(1 \* Math.random()); let banners = new Array(); banners[0]="https://example.com/uploads/default/original/1X/9d9762a4129c78c478d14ff857c3bd1f2be0322a…

При текущем коде виджета пользователям требуется обновить страницу в браузере, чтобы увидеть новые изображения или изменённые ссылки. Я предполагал, что обновление произойдёт автоматически через какой-то AJAX-метод в кэше браузера, как это происходит с изменениями CSS, которые отображаются мгновенно без перезагрузки страницы, но для пользовательских скриптов в **Head** это не работает.

Я заметил, что плагин Ad для рекламы на сайте каким-то образом принудительно обновляет содержимое сразу после изменения HTML рекламы. В файле `house-ads.js` плагина House Ads при поиске по ключевому слову `refresh` я нашёл следующее:

```plaintext
  @observes("refreshOnChange")
  refreshAd() {
    if (this.get("listLoading")) {
      return;
    }

    this.set("adHtml", this.chooseAdHtml());
  },

  didInsertElement() {
    this._super(...arguments);

    if (!this.get("showAd")) {
      return;
    }

    if (this.get("listLoading")) {
      return;
    }

    if (adIndex.topic_list_top === null) {
      // начать с случайного места в инвентаре рекламы
      Object.keys(adIndex).forEach((placement) => {
        const adNames = this.adsNamesForSlot(placement);
        adIndex[placement] = Math.floor(Math.random() * adNames.length);
      });
    }

    this.refreshAd();
  },

```

Можно ли каким-то образом применить аналогичный метод для моего пользовательского JavaScript-плагина?

---

_[View the full topic](https://meta.discourse.org/t/cache-busting-for-updated-scripts-in-theme-components/243036)._
