• JS привязывает события к элементам один раз при построении дерева или многократно?

    @zkrvndm
    Софт для автоматизации
    Если вам надо, чтобы при удалении и создании элемента заново обработчик на нем оставался, то имеет смысл тупо прописать обработчик в соответствующий атрибут. Например:
    <button onclick="alert('Проверка');">Нажми меня</button>

    Вместо onclick может любой другой обработчик: onhover, onfocus и так далее.
    Ответ написан
    Комментировать
  • Рекурсия в JavaScript?

    @zkrvndm
    Софт для автоматизации
    Вам помогут промисы, колбеки или функции генераторы. Генераторы кстати очень интересная вещь, особенно в связке с asunc / awat, можно целые ожерелья и цепочки последовательных вложенных вызовов функций создавать.
    Ответ написан
    Комментировать
  • Как создать расширение для Chrome, которое блокирует доступ к сайту?

    @zkrvndm
    Софт для автоматизации
    Вот вам болванка для запуска произвольного JavaScript-кода на страницах сайтов:
    https://yadi.sk/d/762DIB3tEgNcxw

    1. Распакуйте на рабочий стол папку Plugin
    2. Откройте браузер Google Chrome и перейдите в:
    Меню -> Дополнительные инструменты -> Расширения
    3. Включите режим разработчика в правом верхнем углу
    4. Установите расширение из ранее распакованной папки
    5. Теперь на какой-бы сайт вы не зашли в html-код сайта будет автоматиечски вставлен (и выполнен) код файла из script.js, что лежит в папке с расширением

    В файл script.js вы можете вставлять абсолютно любой код, например вы можете вставить код для проверки адреса и блокирования доступа, если адрес соответствует вашим условиям:
    if (location.href == 'https://yandex.ru') {
    	document.write('Доступ запрещен!');
    }
    Ответ написан
    Комментировать
  • Как передавать данные между разными скриптами(компонентами) в нативном js?

    @zkrvndm
    Софт для автоматизации
    Используйте localForage - это специальный драйвер для облегчения работы со встроенными браузерными базами данных. Локальные БД хороши, но у них сложный синтаксис, плюс все эти версии могут легко запутать новичка.

    В отличии от localStorage, используя localForage можно хранить практически неограниченное количество данных. При этом объекты, массивы, блобы и даже файлы можно скармливать напрямую, localForage их потом выдаст в том же виде в каком вы ему скормили - имеется в виду тип данных, ну там Object, String, Blob, File и так далее.

    Сравните два кода выполняющих одно и то же:

    Код IndexedDB:
    spoiler
    // IndexedDB.
    var db;
    var dbName = "dataspace";
     
    var users = [ {id: 1, fullName: 'Matt'}, {id: 2, fullName: 'Bob'} ];
     
    var request = indexedDB.open(dbName, 2);
     
    request.onerror = function(event) {
        // Обработка ошибок.
    };
    request.onupgradeneeded = function(event) {
        db = event.target.result;
     
        var objectStore = db.createObjectStore("users", { keyPath: "id" });
     
        objectStore.createIndex("fullName", "fullName", { unique: false });
     
        objectStore.transaction.oncomplete = function(event) {
            var userObjectStore = db.transaction("users", "readwrite").objectStore("users");
        }
    };
     
    // После того, как БД создана, добавим туда запись о пользователе
     
    var transaction = db.transaction(["users"], "readwrite");
     
    // Как-то отреагируем на окончание процесса записи в базу
    transaction.oncomplete = function(event) {
        console.log("All done!");
    };
     
    transaction.onerror = function(event) {
        // Не забываем обрабатывать ошибки
    };
     
    var objectStore = transaction.objectStore("users");
     
    for (var i in users) {
        var request = objectStore.add(users[i]);
        request.onsuccess = function(event) {
            // Выведем в консоль информацию о каждом добавленном пользователе
            console.log(event.target.result);
        };
    }


    Код localForage:
    spoiler
    // Сохраняем информацию о пользователях
    var users = [ {id: 1, fullName: 'Matt'}, {id: 2, fullName: 'Bob'} ];
    localForage.setItem('users', users, function(result) {
        console.log(result);
    });


    Синтаксис localForage отдаленно похож на localStorage, с той лишь разницей, что localForage работает асинхронно и не тормозит основной поток. Для работы с localForage можно использовать колбеки, промисы или async / await. Подробная информация с примерами доступна на гитхабе.
    Ответ написан
  • Веб-движок/библиотека для построения таблиц с возможностью фильтрации, выбора столбцов, выгрузки т.д.?

    @zkrvndm
    Софт для автоматизации
    В теории, вам хорошо подойдет плагин: https://datatables.net
    Ответ написан
    Комментировать
  • Во время верстки появляются левые script iframe, что делать?

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

    @zkrvndm
    Софт для автоматизации
    Разместите на странице с формой следующий скрипт:
    <script type="text/javascript">
    window.addEventListener('load', function() {
    	document.querySelector('form input, form textarea')[0].focus();
    });
    </script>

    Этот скрипт, сразу после полной прогрузки страницы установит фокус на самое первое поле в вашей форме.
    Ответ написан
    Комментировать
  • Local storage, backend и всё?

    @zkrvndm
    Софт для автоматизации
    Используйте localForage, объем данных для хранения практически не ограничен, в отличии от localStorage. При этом, объекты можно записывать напрямую, без пребразования в JSON.
    Ответ написан
    1 комментарий
  • Как парсить страницу где есть авторизация но не используя ее?

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

    @zkrvndm
    Софт для автоматизации
    Элементарно:
    (function(){
        window.takeMeOutside = function() {
            console.log("I'm here!");
        }
    })();

    Если функцию объявить через window, то она будет объявлена глобально.

    Также можно через eval:
    window.eval('ваш код');
    Eval выполняет код из строки, в варианте выше выполняет код из строки глобально. Это может быть удобно, когда сам JavaScript-код вы грузите AJAX-ом по условию и надо потом полученный в виде обычного текста js-код запустить глобально.
    Ответ написан
  • Как слушать несколько Whatsapp виртуальных номеров?

    @zkrvndm
    Софт для автоматизации
    Я обычно в таких случаях тупо делаю в браузере несколько профилей и уже через них работаю. И да, для веб-ботов я использую не селениум, а обычный хром, при этом управляющий браузером код оформляю в виде расширения. Делать отладку одно удовольствие, все наглядно видно, как сам сайт, так и все что происходит в консоли.
    Ответ написан
    7 комментариев
  • На чём зарабатывают сайты опросники?

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

    @zkrvndm
    Софт для автоматизации
    При отправке запроса на другой домен fetch не передает куки, а без куков ваш сервер не может определить пользователя. Подробнее тут:
    https://learn.javascript.ru/fetch-api#credentials
    Вам нужно указать параметр credentials равным include, при этом для корректной работы сервер у вас должен отдавать заголовок Access-Control-Allow-Credentials.

    Сам с собой это только если ваш сайт и бэкенд на разных доменах. Если они на одном и том же домене, но ошибка сохраняется, ищите причину на серваке или попробуйте для начала заюзать XMLHttpRequest.
    Ответ написан
  • Как из расширения для chrome изменить картинку на сайте?

    @zkrvndm
    Софт для автоматизации
    Попробуйте не менять атрибут src, а целиком заменить сам элемент сразу по готовности документа:
    document.addEventListener('DOMContentLoaded', function() {
    	document.querySelector('.bmenu__theme > img').outerHTML = '<img alt="Зарплаты айтишников" src="'+chrome.extension.getURL('/images/1.png')+'" style="position:relative; vertical-align: middle; top: -2px; margin-right: 4px;" width="20">';
    });

    В манифесте расширения на всякий случай укажите порядок загрузки своего скрипта:
    {
        "matches": ["https://qna.habr.com/*"],
        "css": ["style.css"],
        "js": ["script.js"],
        "run_at": "document_start"
    }

    При run_at равной document_start ваш скрипт будет запущен еще до готовности документа.
    Ответ написан
    1 комментарий
  • Как добавить валидацию типа данных?

    @zkrvndm
    Софт для автоматизации
    Комментировать
  • В Chrome исчезло автозаполнение полей ввода — как восстановить?

    @zkrvndm
    Софт для автоматизации
    Читайте новости, с недавнего времени изменились правила работы авто заполнения полей форм:
    https://www.opennet.ru/opennews/art.shtml?num=53396
    Попробуйте поэкспериментировать с настройкой chrome://flags#mixed-forms-disable-autofill
    Ответ написан
  • Как перенаправить пользователя на урл с такой же вкладкой?

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

    Знаете ли вы, что localStorage запускают события? Точнее, событие возникает, когда нечто добавляется, меняется или удаляется из хранилища. Это значит, что когда вы касаетесь localStorage в любой вкладке, все остальные могут узнать об этом. Достаточно прослушивать события в объекте window:
    window.addEventListener('storage', function (event) {
      console.log(event.key, event.newValue);
    });


    Надеюсь сами догадайтесь, как это применять? Источник: https://habr.com/ru/post/250891/
    Ответ написан
  • Как ставить такое приложение в виде фрейма?

    @zkrvndm
    Софт для автоматизации
    Создайте новый сайт на суб домене, залейте в него ваши файлы. Зайдите на суб домен и убедитесь, что корректно работает. Далее, остается только вывести ваш суб домен на основном сайте и считай готово.

    P. S. В теории вам должны были дать полностью готовую к использованию страницу, но если вдруг нет, то для просмотра swf в браузере можете использовать krpano.
    Ответ написан
    Комментировать
  • Какой парсер выбрать?

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

    Короче, я это к чему. С вашим вопросом вам нужно пойти на фрилансим оставить там заявку, так как ну не существует в природе парсеров, которые из под коробки смогут выдать ожидаемый вами результат.
    Ответ написан
    3 комментария
  • Как запретить meta-редирект?

    @zkrvndm
    Софт для автоматизации
    Я не уверен, но попробуйте выполнить window.stop() сразу после готовности страницы.

    Еще можно попробовать предопределить window.onbeforeunload прервав действие по умолчанию.

    Но самый простой способ это использовать Firefox, там данный метатег можно отключить в настройках.
    Ответ написан
    Комментировать