Задать вопрос
Ответы пользователя по тегу JavaScript
  • Как изолировать html код моего расширения для chrome/FF от влияния стилей с сайта?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Более-менее хорошее решение предложил Владимир Мальков.
    К сожалению селектор * протекает и в shadow DOM, но чаще всего это не имеет значения.

    В будущем могут помочь css правила:
    contain: layout - сейчас нет поддержки браузерами.
    all: revert - сейчас нет поддержки браузерами revert.

    Можно использовать all: unset, для всего, но тогда пропадут и стили по умолчанию, придётся к каждому элементу возвращать их вручную.

    Абсолютная гарантия есть сейчас только у iframe с allowtransparency="true" но там придётся сильно морочиться с размерами и позиционированием.
    Ответ написан
    Комментировать
  • Переключение стилей по кнопке?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Ну вы прям как беспомощные дети, право слово.
    Открываем исходники(там всего два файла) и практически с первых строк видим как там всё устроено. Переменная которая вам нужна - mixColor.
    Вот только там не чёрный цвет, а вовсе даже белый, потому что на самом деле там происходит не смена цвета body, а наложение div с классом darkmode-layer поверх всего в режиме: mix-blend-mode: difference;.
    Тут уж вы сами подбирайте нужный цвет с нужным режимом смешивания.
    Ответ написан
    3 комментария
  • Почему картинка не отображается?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Потому что надо подождать пока картинка загрузится:
    const ground = new Image();
    ground.onload = () => ctx.drawImage(ground, 10, 10);
    ground.onerror = console.error;
    ground.src = "assets/img/ground.jpg";
    Ответ написан
    Комментировать
  • Почему исходный массив не изменяется когда мы его перезаписываем внутри функции?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    let arr = [5, 3, 8, 1];
    function filterRangeInPlace(innerArr,val1,val2) {
      innerArr = innerArr.filter(el => (val1 <= el && el <= val2));  
    }
    
    filterRangeInPlace(arr, 1, 4); // удалены числа вне диапазона 1..4
    
    alert( arr) ; // [3, 1]
    Так должно быть понятнее.
    Ответ написан
    Комментировать
  • Как объединить два объекта в один с одинаковыми именами свойств?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Воспользоваться уже написанной, и хорошо оттестированной: mergeWith.
    Примерно так:
    import { isObject, isUndefined, mergeWith } from 'lodash';
    
    export function merge(...args) {
      return mergeWith(...args, (a, b) => {
        if(
          !(isObject(a) && isObject(b)) // хотя бы один не объект
          && !(isUndefined(a) || isUndefined(b)) // оба заданы
          && a !== b // не равны
        ) return () => null
      });
    }
    Возможно там потребуются ещё какие-то проверки.
    Ответ написан
    Комментировать
  • Чем заменить script?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Если закрывали те же криворучки, что писали и первую версию, то может прокатить: "><img src="" onerror="alert(1)">.
    Ответ написан
    Комментировать
  • Почему данном случае теряется контекст this?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Простой ответ:
    Берём метод:
    метод = function(){
      console.log(this)
    };
    и(не важно как) пихаем его в какие-то объекты.
    Получаем:
    хрень.метод() // this - хрень
    хрень.кишки.метод() // this - хрень.кишки
    метод() // this - window
    
    хрень.метод.call(хрень.кишки) // this - хрень.кишки
    метод.call(хрень.кишки) // this - хрень.кишки
    метод.call(null) // this - null
    
    элемент.addEventListener('оппа', хрень.метод) //  this -элемент
    элемент.addEventListener('оппа', метод) //  this -элемент
    элемент.addEventListener('оппа', хрень.кишки.продукт.метод) //  this -элемент

    По сути this для фукции - это то, что идёт перед точкой, кроме тех случаев когда он переопределён явно. Всё, никакой эзотерики.)

    fn.call(!this ? this : obj) - это чушь скорее всего. Если this - falsy, то ставим его как this при вызове функции fn, иначе ставим obj. Falsy this может быть только при явном указании(или в strict режиме, при вызове функции напрямую("без точки перед ней")), и скорее всего передача пустого this в таком случае просто сломает выполнение fn.

    Ну ещё следует упомянуть стрелочную фукнцию:
    метод = () => {
      console.log(this)
    };
    это можно считать за явное указание this, потому что this тут всегда привязан тот, что был при создании стрелочной функции, независимо от того как и откуда её вызывают.
    Ответ написан
    3 комментария
  • Как получить результат из асинхронной функции в javascript?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    navigator.serviceWorker.ready -> return navigator.serviceWorker.ready :)
    Ответ написан
    1 комментарий
  • Подключение внешнего файла js к create-react-app?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Uncaught SyntaxError: Unexpected token '<', говорит что вместо скрипта тебе грузится html.
    Скорее всего путь к скрипту неправильный.
    Например путь прописан относительный и при этом проект лежит не в корне или используется history api: в таком случае в приложении пути разруливаются роутером, а жестко подключённый скрипт страдает.
    Ответ написан
    Комментировать
  • Можно ли отследить скачиваемый файл?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Обычное скачивание отследить нельзя. Скачивается файл отдельно от страницы.
    Можно, но не желательно: скачивать файл через ajax в память, а потом отдавать повторно как blob. Это будет жрать память пропорционально размеру загружаемого файла и всё равно будет не отслеживаемая задержка пока файл из памяти пишется на диск.
    Можно, но чисто теоретически: отслеживать чтение файла на сервере и каким-либо способом(напр. websocket) передавать данные о прогрессе на клиент. Реализацию такого извращения скорее всего придётся пилить самому и она нетривиальна.
    Ответ написан
    Комментировать
  • Как сделать так, чтобы получить url на страницу с уже открытым всплывающим окном?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Читать полученные параметры из адресной строки и открывать модалку, примерно так:
    $(document).ready(function () {
      var searchParams = new URLSearchParams(location.search.slice(1));
      if(searchParams.get('popup') === 'show') {
        $("#myModal-" +  searchParams.get('idpopup')).modal();
      }
    });
    Ответ написан
    Комментировать
  • Почему рекурсия не работает?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    У Number нет length.
    Ответ написан
    Комментировать
  • Как вернуть код ошибки из функции?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Виталий всё правильно сказал - возвращайте объект и работайте с ним.

    А так, если код синхронный, ещё есть дедовский вариант хранить в свойстве самой функции:
    dataValidation(val) { 
      if (val == 1) {
        dataValidation.lastError = null;
        return true;
      } else {
        dataValidation.lastError = {
          code: 0xA,
          message: 'is not 1'
        };
        return false;
      } 
    }
    
    
    if (!dataValidation(myInputData)) { 
      swal(dataValidation.lastError); 
    } else {
      //дальнейшее выполнение функции
    }
    Ответ написан
    Комментировать
  • Как настроить абсолютный путь в typescript/webpack?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    В попробуй compilerOptions добавить что-то типа:
    "paths": {
      "src/*": [ "app/src/*" ]
    }
    Ответ написан
    Комментировать
  • Почему не работает closest в jQuery?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Вероятно у вас где-то выше объявлено "use strict"; что запрещает, помимо всего прочего, использование не объявленных переменных.
    Решение, соответственно, переменные эти объявлять, используя var, let или const, а не мусорить в глобал.
    Ответ написан
  • Как правильно адаптировать package.json для запуска в windows 10 home?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Если пофиг на линкусоидов, то API_URL => set API_URL
    Ответ написан
    Комментировать
  • Можно ли перехватить ответ пост запроса из формы?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Перехватить ничего нельзя.
    Можно по onsubmit:
    a) скачивать файл ajax'ом, и после этого отдавать при наличии.
    b) делать предварительно HEAD запрос, и только если статус не 404 вызывать реальный submit.
    Вариант a не подходит для больших файлов, т.к. жрёт память. Вариант b делает лишний запрос.

    Правильный вариант - переработать логику сервера и формы.
    Ответ написан
    Комментировать
  • Как получить элемент значение javascpirt из json?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Ответ написан
    Комментировать
  • Правильно ли при клике остановить таким образом Timeout?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Нет.
    Утрируя: скобочки после имени функции - это вызов этой функции прям сейчас, вон там где ты это написал.
    Обработчиком на клик в данном случае, соответственно, назначается то, что функция возвращает. А clearTimeout у нас не возвращает ничего.
    В итоге прямо в момент запуска кода cityRemoveTime будет остановлен, а на каждый клик у нас будет происходить ничего.
    Ответ написан
    Комментировать