Задать вопрос
  • Set-Cookies не работает в браузере, а в Postman работает, как сохранить куки в браузере?

    Aetae
    @Aetae
    Тлен
    Всё сохраняется, но домен localhost != localhost:7048 != localhost:3000.
    Все запросы к соответствующему домену localhost:7048 будут иметь нужный куки.

    Если на проде и api и основной сайт будут на одном домене, без разделений - используй встроенный dev server proxy, чтобы и при локальной разработке они тоже были одним, проксируя запросы на localhost:7048 с localhost:3000.

    Если на разных и авторизация должна работать по типу SSO - не используй куки и вообще не пили свой велосипед, используй готовые реализации oauth и для бэка и для фронта.
    Ответ написан
  • Почему приложение не билдится из-за vue-yandex-maps?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Я, как и сборщик, не вижу экспорта yandexMap и yandexMarker, вижу YandexMap и YandexMarker.
    Ответ написан
    2 комментария
  • Почему некоректно обновляется ширина в кастомном хуке?

    Aetae
    @Aetae
    Тлен
    Классика: ты этот width наверняка присваиваешь какому-то элементу. Соответственно, ширина этого элемента становится ровна width. Когда ты меняешь ориентацию - ты не убираешь width перед этим, а значит innerWidth окна не минимальное значение, а то, какое получилось с учётом элемента с width, который это окно распирает.
    Т.е. после каждого увеличения width, window.innerWidth не может быть меньше чем width.

    Такие задачи принято решать вёрсткой.
    Ответ написан
    2 комментария
  • Как изменить скрипт сайта через js?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Если вопрос на самом деле: "Почему из расширения не доступны глобальные переменные и функции?", то ответ - потому что расширения работают через слой безопасности, чтобы тебя случайно не взломали через твоё расширение.

    Как добраться до глобальных переменных через этот слой - зависит от конкретного браузера. Читай документацию.

    Универсальный подход(при отсутствии CSP) - просто добавить на страницу script с нужным содержимым. Примерно так:
    function runInScript() {
      // здесь везь код, независимый от иных функций
      document.loremipsum()
    }
    
    
    
    document.head.append(
      Object.assign(
        document.createElement('script'),
        {
          innerHTML: `(${runInScript.toString()})()`,
          onload() { this.remove() }
        }
      )
    );
    Ответ написан
    Комментировать
  • Как избежать скачков header с использование scroll и transform?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Если использовать position: sticky в css, который именно для этого и предусмотрен, нельзя, то сделай так чтоб было можно. Потому что это единственный реально адекватный вариант, а какие-то там проблемы с твоим overflow - это твой косяк, который и надо решать.

    С программным изменением позиции оно всегда будет "дёргаться" без вариантов. До того как появилось sticky - это решали хитрой вёрсткой, где "на самом деле" никакая позиция не меняется, а fixed(а ещё раньше absolute) дубликат элемента показывали\скрывали по условию.

    P.S. Возможно можно что-то плавное изобразить при помощи requestAnimationFrame и getBoundingClientRect, не привязываясь к событию scroll, но не пробовал ибо не нужно.
    Ответ написан
  • Как сделать рендер только один раз?

    Aetae
    @Aetae
    Тлен
    Обернуть App в memo. Ток прям один раз всё равно не получится: один рендер на отображение пустых users, второй на отображение заполненных когда те загрузятся.
    Ответ написан
    Комментировать
  • Отображение содержимого pdf файла на сайте?

    Aetae
    @Aetae
    Тлен
    Можно взять pdf.js и допилить как тебе надо. Будет жирно и тяжело.
    Либо моджно сохранить pdf как набор картинок и просто положить их на сайт. Будет просто и жирно.
    Ответ написан
    4 комментария
  • Существует ли сайт-браузер или VPN без клиента?

    Aetae
    @Aetae
    Тлен
    Это называется web-proxy. Решений таких миллион, гугли да разворачивай. Не забудь только запоролить, а то боты быстро тебе весь трафик выжрут, а потом и ркн забанит.:)
    Ответ написан
    1 комментарий
  • Windows ffmpeg bat. Почему, при запуске через bat, ведет себя под другому чем при запуске через cmd?

    Aetae
    @Aetae
    Тлен
    Потому что в bat % воспринимается как спецсивол, а в cmd - нет.
    Тупо сравни echo "%d".
    Надо экранировать: %%d.

    Почему так? Хз, не особо шарю за bat, гуглить надо.:)
    Но скорее всего ответ, как обычно: "так исторически сложилось".
    Ответ написан
    Комментировать
  • Как использовать объект VNodeRef?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Зачем ты огород то городишь?
    :ref="setPostRef"
    -->
    ref="postRefs"

    И всё, в postRefs.value у тебя массив элементов.

    В твоём варианте ты прям в кишки vue лезешь.
    Ответ написан
    Комментировать
  • Как правильно вставить HTML-код в JSON-файл?

    Aetae
    @Aetae
    Тлен
    Ответ на твой вопрос: именно так как ты и записал. Задача решена.

    Ответ на настоящий вопрос: изменить метод, которым ты выводишь этот json на страницу с вывода текста, на вывод html.
    В зависимости от того чем ты пользуешься для вывода настройки будут разными, так что требуется больше информации. Если ты используешь ванилу - смени textContent\innerText\append на innerHTML\insertAdjacentHTML.

    P.S. Если данные в этом json могут содержать пользовательские данные, а не только то что напишешь лично ты, то не забудь подключить библиотеки-санитайзеры, иначе тебе быстро всё сломают хацкеры.
    Ответ написан
    Комментировать
  • Как изменить стили для message в Ant Design в React?

    Aetae
    @Aetae
    Тлен
    Судя по доке на внутренний контент props'a класса нет.
    Остаётся три варианта:
    1. Изменение темы:
    В v4 глобально, изменив less переменную: @message-notice-content-bg, в v5 через свойство contentBg:

    https://ant.design/docs/react/migrate-less-variabl...

    2. Тупо руками переписать вложенный класс:
    .custom-class .ant-message-notice-content { ... }

    3. Передать кастомный компонент с нужными стилями в качестве content.
    Ответ написан
  • Как стилизовать данную фигуру?

    Aetae
    @Aetae
    Тлен
    transform: matrix3d
    Ответ написан
    Комментировать
  • Можно ли отслеживать css переменные с помощью computed?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Вот по-быстрому накидал в качестви зарядки такой кастомный дерьмохук (который ни в коем случае нельзя использовать в проде, только в целях демонстрации. :) ):
    import { Ref, computed, ref, watch, onMounted, onUnmounted } from 'vue';
    
    function isHTMLElement(arg: unknown): arg is HTMLElement {
      return !!arg && arg instanceof HTMLElement;
    }
    
    function useCSSVariable(
      variable: string,
      el: HTMLElement | Ref<HTMLElement> = document.documentElement
    ) {
      if (!variable.startsWith('--')) variable = `--${variable}`;
      if (!isHTMLElement(el)) watch(el, value => (el = value), { immediate: true });
    
      const prev = ref();
    
      let timeoutId: number;
      const interval = () => {
        const current = isHTMLElement(el)
          ? getComputedStyle(el).getPropertyValue(variable)
          : null;
    
        if (current !== prev.value) prev.value = current;
    
        timeoutId = window.setTimeout(interval, 100);
      };
    
      onMounted(() => {
        interval();
      });
    
      onUnmounted(() => {
        clearTimeout(timeoutId);
      });
    
      return computed<string>({
        set(value) {
          let current: null | string = null;
    
          if (isHTMLElement(el)) {
            el.style.setProperty(variable, value);
            current = el.style.getPropertyValue(variable);
          }
    
          if (prev.value !== current) prev.value = current;
        },
        get() {
          return prev.value;
        }
      });
    }


    Ещё раз - использовать это не надо, это скорее шутка. Что надо - выяснить твою задачу и решать её нормально по-человечески.
    Ответ написан
    Комментировать
  • Как проксировать запросы к API?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    При использовании postman ничего проксировать не надо, он делает запросы без ограничений. Т.о. ошибки у вас возникают не по этой причине, а из-за кривых запросов и\или кривого сервера. Пытайтесь дальше.

    P.S. Ограничения есть в браузере, если вы будете писать клиентское приложение то изучить, что такое CORS вам придётся в любом случае.
    Ответ написан
    Комментировать
  • Как сделать такую маску в CSS?

    Aetae
    @Aetae
    Тлен
    clip-path прекрасно умеет скруглять, rtfm.

    Вот через фильтр, когда-то похожее делал:

    Принцип прост: размываешь подложку через feGaussianBlur, делаешь края снова резкими через ComponentTransfer альфа-канала. В твоём случае ещё stroke и drop-shadow наверное понадобятся, сам смотри.

    ...upd: из интереса нафигачил без фильтров:

    Всё возможно.:)

    Поигрался пут с фильтром, вот версия фильтр + простой clip-path, поддерживает полупрозрачность фона, полупрозрачность бордера и тень:

    clip-path'ом вырезаем простые квадраты, фильтром закругляем. Фильтр можно в принципе применять к любому набору элементов. Версия не последняя, есть шероховатости, может ещё когда-нить потыкаю ещё.:)
    Ответ написан
    5 комментариев
  • Как решить проблему с узкой шириной текста возле float элементов?

    Aetae
    @Aetae
    Тлен
    Накидал такую хрень, с использованием трюка с распоркой и тюка с translate:
    (потыкай в 0.5x\1x)
    Работает только если ширина контейнера известна(здесь 100vw).

    Но хз, на самом деле, наверное на js будет проще.:)
    Ответ написан
    2 комментария
  • Почему данные не реактивны?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    В vue 2 добавленые после создания ключи объектов не реактивы из-за технических ограничений. (Раньше это большими буквами в доках писалось).
    Надо использовать this.$set \ Vue.set при добавлении нового ключа.

    В твоём случае можно переделать так:
    const templates = reactive(keyBy(templatesArr, 'id'))
    for (let templateId in templates) {
      const devices = devicesArr.filter(device => device.templateId === templateId)
      Vue.set(templates[templateId], 'devices', devices);
      Vue.set(templates[templateId], 'settings', {});
    }
    
    // либо просто так:
    const templates = keyBy(templatesArr, 'id');
    for (let templateId in templates) {
      const devices = devicesArr.filter(device => device.templateId === templateId)
      Object.assign(templates[templateId], { devices }, {settings: {}})
    }
    reactive(templates);


    P.S. не помню чтоб в vue 2 было reactive, вместо него был Vue.observable. Но может добавили, хз, лень смотреть.:)
    Ответ написан
    Комментировать
  • Как убрать ненужную всплывающюю подсказку?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Поставь <form> атрибут novalidate чтоб не вылезали стандартные подсказки браузера.
    Ответ написан
  • Как запретить видеть владельцам Wifi когда я в сети и на каких сайтах?

    Aetae
    @Aetae
    Тлен
    могут ли они видеть на каких сайтах я сижу?
    Могут, если сильно захотят. Это не стандартная опция для пользовательского сегмента, но при желании и щепотке красноглазия - всё возможно.

    как тогда избежать этого?
    Только VPN(или любой иной шифрованный туннель).

    возможно ли запретить им видеть когда я сижу на их инете
    Только если держать VPN соединение поднятым постоянно, при этом гоняя по нему паразитный трафик примерно равный твоему обычному потреблению - иначе тупо по пику трафика легко будет понять.
    Если дошло до этого - проще свисток купить и сидеть через свою личную мобильную сеть.
    Ответ написан
    5 комментариев