Ответы пользователя по тегу JavaScript
  • Как лучше использовать setInterval?

    @zkrvndm
    Софт для автоматизации
    Я предпочитаю использовать асинхронный while и в конце задавать задержку до следующего цикла через промисы.

    while (true) {
        console.log('Выполняем что-то раз в секунду');
        await new Promise(function(s) { setTimeout(s, 1000); });
    }
    Ответ написан
    Комментировать
  • Как импортировать данные из .docx файла в JavaScript логику?

    @zkrvndm
    Софт для автоматизации
    Используй ChatGPT чтобы спарсить данные из документа и преобразовать в JSON требуемой структуры. Chat GPT 4 вполне себе справится с анализом и подготовкой выжимки.
    Ответ написан
  • Как правильно запрограммировать повторную аутентификация прокси в расширении Chrome?

    @zkrvndm
    Софт для автоматизации
    Детские ошибки. А ты учел, что каждый раз, когда ты ставишь прокси, ты паралельно ставишь НОВЫЙ обработчик авторизации chrome.webRequest.onAuthRequired.addListener? При том СТАРЫЕ обработчики никуда не делись, они продолжают висеть и вызваться при каждой авторизации. Ведь ты не удосужился старые обработчики при помощи chrome.webRequest.onAuthRequired.removeListener удалить, а надо бы!

    Тебе надо все переписать так, чтобы обработчик chrome.webRequest.onAuthRequired.addListener ставился только один раз за все время жизни фонового процесса background.js, либо удаляй сначала старые обработчики, прежде чем ставить новые.
    Ответ написан
    1 комментарий
  • На сервер приходит Buffer длиннее, чем я отправляю с фронта, как это исправить?

    @zkrvndm
    Софт для автоматизации
    Ты не правильно данные отправляешь. Во первых, у тебя абсолютно некорректные заголовки, когда отправляешь бинарные данные заголовки можно не прописывать, браузер сам их пропишет. Во вторых, почему ты пытаешься отправить arrayBuffer? Откуда он у тебя? Отправляй File или Blob при помощи FormData, тогда проблем не будет.
    Ответ написан
    Комментировать
  • Парсинг iframe на своем сайте?

    @zkrvndm
    Софт для автоматизации
    Если содержимое фрейма грузится с вашего домена, то да спарсить можно. Если с чужого, то напрямую нет, надо сделать, чтобы данные грузислись с вашего домена и тогда сможете спрасить.
    Ответ написан
  • Как с помощью JavaScript запустить файл?

    @zkrvndm
    Софт для автоматизации
    1. При нажатии на кнопку выполняешь AJAX запрос на сервер
    2. Твой сервер уже принимает запрос и запускает нужный файл
    Ответ написан
    Комментировать
  • Как сделать чтобы события обработался в секунду один раз?

    @zkrvndm
    Софт для автоматизации
    Это делается достаточно просто, если уметь работать с промисами, обработчиками событий и циклами:
    (async function() {
    
        while (true) {
    
            await new Promise(function(s) { document.addEventListener('scroll', s, { 'once': true }); });
        
            console.log('Зафиксирован скрол страницы, ждем секунду перед следующий фиксацией...');
        
            await new Promise(function(s) { setTimeout(s, 1000); });
        
        }
    
    })();
    Ответ написан
    2 комментария
  • Как найти точный url сайта на javascript?

    @zkrvndm
    Софт для автоматизации
    Да, конечно. Если у вас фильтры работают с перезагрузкой страницы, то с высокой вероятностью используется тег <form></form> для переадресации. Отправку форму при помощи данного тега вполне можно перехватить на JavaScript, отменить, загрузить данные с целевой страницы вручную AJAX-ом, спарсить полученные данные при помощи DOMParser и сразу вывести на странице, не трогая при этом фильтры.
    Ответ написан
    4 комментария
  • Push уведомления в PWA приложении с запросом в БД?

    @zkrvndm
    Софт для автоматизации
    Никак. Да, формально во всех браузерах встроен механизм подписок на уведомления от сайтов, но это дерьмо работает крайне нестабильно и через раз, часто уведомления просто не доходят или доходят не вовремя.

    Единственный способ организовать более менее стабильные уведомления пользователям вашего PWA приложения это использовать различные внешние API для отправки SMS, в отличии от встроенных push это намного надежнее.

    https://www.google.ru/search?q=отправка+sms+API
    Ответ написан
    Комментировать
  • Как получить input из iframe?

    @zkrvndm
    Софт для автоматизации
    Ответ никак - не соответствует истине. Получить данные с input находящего во фрейме можно, но для этого необходимо, чтобы целевая страница загружалась с вашего домена. Этого можно достичь используя обратный реверс прокси - это как свой собственный личный анонимайзер, через который вы можете просмотреть любой сторонний сайт с модификацией контента. Единственно НО, это все сложно, дорого и неоправданно в большинстве случаев, проще спарсить все необходимые данные напрямую используя всякие селениумы и т. д.
    Ответ написан
  • Как можно ограничить скорость запроса в js?

    @zkrvndm
    Софт для автоматизации
    В прошлом году Google Chrome и все Chromium браузеры получили апдейт, теперь при выполнении POST-запросов можно управлять исходящим потоком, в том числе передавать данные с нужной вам скоростью.

    https://developer.chrome.com/articles/fetch-stream...

    Chat GPT этого не знает, так как его базы данных ограничены сентябрем 2021.
    Ответ написан
    2 комментария
  • Как отключить авто отправку drag file формы?

    @zkrvndm
    Софт для автоматизации
    Тебе НЕ надо отключать автозагрузку файлов, просто делай на странице 2 формы. Одна форма грузит файлы в централизованное хранилище и полученную ссылку на файл подставляет уже к форме с сообщением. Должна быть возможность нажатием крестика удалить файл и из сообщения и из хранилища. Это правильная логика для формы.

    Ты не должен файлы отправлять вместе с сообщением, сообщение должно содержать только ссылки на файлы. Вспомни как реализованы формы обратной связи на популярных сайтах, когда ты цепляешь медиа на правильно сконструированную форму, медиа заранее грузится на сервер, еще до отправки письма и это правильных подход.
    Ответ написан
    4 комментария
  • Как файлов в formData получить base64?

    @zkrvndm
    Софт для автоматизации
    Ну, во первых у тебя ошибка в функции getBase64, а именно там надо возвращать просмис и разрешать его после того, как Blob прочитан, соотвественно это требует времени на работу функции. Вторая твоя проблема, ты пытаешься в синхронном цикле выполнить асинхронную операцию, ожидая что ответ получишь тут же и ты сможешь его записать в переменную, но в случае с промисами это нифига не так.

    Для того, чтобы конвертировать File в Base64 синхронно, нужен другой подход. Существует хак, позволяющий с использованием XMLHttpRequest и TextEncoder выполнить конвертацию файла в base64 синхронно, вот пример:
    function getBase64(file) {
    
      var url = URL.createObjectURL(file);
    
      var request = new XMLHttpRequest();
      request.open('GET', url, false);
      request.send(null);
    
      var u8a = new TextEncoder().encode(request.responseText);
    
      var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
    
      var bytes = u8a, i, len = bytes.length, base64 = '';
    
      for (i = 0; i < len; i += 3) {
        base64 += chars[bytes[i] >> 2];
        base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
        base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
        base64 += chars[bytes[i + 2] & 63];
      }
    
      if (len % 3 === 2) {
        base64 = base64.substring(0, base64.length - 1) + '=';
      }
    
      else if (len % 3 === 1) {
        base64 = base64.substring(0, base64.length - 2) + '==';
      }
    
      return base64;
    
    }

    Но должен предупредить, что этот хак будет работать только с текстовыми документами. Различные медиаданные он тупо поломает. Если надо в Base64 перегнать медиа, то надо использовать FileReader и промисы.
    Ответ написан
    Комментировать
  • Как на js перехватить ответ XMLHttpRequest запроса на странице?

    @zkrvndm
    Софт для автоматизации
    Технология которая может тебе помочь, называется манкипатчингом. Вкратце, это замена функции оригинала, своей собственной функцией оберткой. Ну а более подробнее же... воспользуйся поиском:
    https://yandex.ru/search/?text=XMLHttpRequest+пере...

    P. S. Вспомнил, что я уже отвечал на такой вопрос: Как получить ответы на запросы сторонних скриптов в js?
    Ответ написан
    2 комментария
  • Как написать асинхронную функцию?

    @zkrvndm
    Софт для автоматизации
    Все отличие асинхронной функции от обычной в том, что асинхронная всегда возвращает промис.

    Используй промисы!

    function getElem(url, selector) {
    
      return new Promise(function(success, error) {
    
        var xhr = new XMLHttpRequest()
        xhr.open('GET', 'http://waypoints/page/' + url, true);
        xhr.responseType = 'document';
        
        xhr.onreadystatechange = function () {
    
          if (xhr.readyState === 4) {
    
            if (xhr.status === 200) {
    
              console.log('Скачан документ:', xhr.response);
    
              success(xhr.response.querySelector(selector));
    
            }
    
            else {
    
              error('Ошибка при выполнении запроса');
    
            }
    
          }
    
        }
    
        xhr.send();
    
      });
    
    }
    Ответ написан
  • Как ограничить количество товара в корзине в Tilda?

    @zkrvndm
    Софт для автоматизации
    При добавлении товара происходит POST-запрос на API тильды. Вы можете перехватывать данные запросы при помощи метода макнипатчинга и блокировать, если в корзине товаров больше, чем вам нужно.
    Ответ написан
    Комментировать
  • Как создать подобную функцию в JavaScript?

    @zkrvndm
    Софт для автоматизации
    Свои собственные методы можно создавать через прототипы.

    https://habr.com/ru/articles/518360/
    Ответ написан
    Комментировать
  • Как на jQuery перехватить (провести) get-запрос по динамическому множеству ссылок?

    @zkrvndm
    Софт для автоматизации
    Что именно вызывает у вас затруднения? Если умейте грузить данные по одной ссылке, то какая принципиальная разница обойти все ссылки при помощи цикла и сделать все тоже самое?

    У jQuery для обхода массивов есть встроенный метод jQuery.each, а для обработки результатов можно использовать jQuery.Deferred, который полностью обратно совместим с Promise.
    Ответ написан
  • Как заблокировать возможность делать скриншоты на моем сайте или хотя бы по нажатию на PrtScn возвращать серую картинку вместо изображение сайта?

    @zkrvndm
    Софт для автоматизации
    Никак, но ты можешь бороться с нарушителями твоего пользовательского соглашения. Во первых, доступ к контенту только после надежной авторизации. Во вторых, на каждой странице прячешь уникальный код по одному известному тебе алгоритму (это называется стенография). Если скриншоты всплывают где-то, выявляешь по этому скрытому шифру пользователя, через которого утечка произошла и уже с ним напрямую решаешь проблему. Штраф там, вечная блокировка или еще что.
    Ответ написан