Ответы пользователя по тегу JavaScript
  • Как можно определить последнюю открытую вкладку сайта в браузере, на JS?

    @rPman
    Вопрос составлен ужасно, но если я верно понял - у вас высокая нагрузка на сервер из-за неправильно выбранной технологии.

    Чтобы на стороне клиента мониторить события, которые им хочет сообщать сервер, вам нужны websocket или хотя бы long pooling (устаревшая технология на тот случай, если вебсокеты не доступны).

    Первое очень просто - клиент держит специальное подключение к специальному websocket серверу, который вы должны поднять на сервере (реализация вебосокет есть на всех популярных языках, начиная с php).
    Пример сервера - https://reactphp.org/
    На клиенте - штатный https://developer.mozilla.org/en-US/docs/Web/API/W...

    Второе - специальный запрос к бакенд серверу на файл, который сервер не отдает до тех пор пока ему не понадобится что то сообщить клиенту (причем каждому клиенту сервер по своему отдает это файл), это реализуется на любом языке очень просто, но не так эффективно как через вебсокет сервер.
    Пример -https://github.com/panique/php-long-polling
    Ответ написан
    4 комментария
  • Как определить реальную видимость элемента?

    @rPman
    nodeElement.getBoundingClientRect() возвращает прямоугольник, если у него размеры =0 то он невидим.

    Вот пример, этот код инжектят на страницу и он периодически сканирует ее всю и возвращает список видимых объектов с координатами их областей.
    Ответ написан
  • Есть ли минусы у многократной подгрузке скриптов в модули?

    @rPman
    На сколько мне известно в require проверяет, загружался ли модуль и если да, то он просто возвращает уже проинициализированный объект

    Осторожно с относительными путями (типа './file.js'), одна и та же строчка в зависимости от места расположения вызывающего скрипта, будет искать модули в разных местах и если там будут файлы с теми же именами (например разные версии модуля) то вопрос, будет ли использован кеш для второго вызова но другого скрипта или нет.
    Ответ написан
    Комментировать
  • Можно ли сделать функцию, которая вернёт первую выполненную команду?

    @rPman
    В пределах сессии (веб-приложения или одной страницы, если не используются фреймы, хотя для хромиум это вопрос исследования) javascript выполняется в пределах одного процесса, это значит не получится запустить две функции в разных потоках чтобы они выполнялись одновременно... только последовательно.

    Попробуйте web-workers, они по уму могут работать в отдельном процессе, т.е. запускаете два воркера в каждому своя функция и ждете кто первый вернет результат.... Но учтите, даже в случае многопоточного исполнения никаких гарантий что повторный вызов даст тот же результат по скорости.
    Ответ написан
    Комментировать
  • Как включить JS после выхода из режима ожидания?

    @rPman
    Ловите событие appresume
    window.appResumeEvent = new Event('appresume');
    window.addEventListener('appresume', yourFunction, false);

    ну и это
    Ответ написан
    Комментировать
  • Как запустить три асинхронных функции последовательно через Callback?

    @rPman
    Какое то эпическое непонимание проблемы, а есть ли проблема?
    эм
    function first() {
      setTimeout(() => {
        second();
        console.log("первая ended");
      }, 300);
    }
    Ответ написан
    Комментировать
  • Как экспортировать DataTables в Excel без округления чисел?

    @rPman
    экспортируйте в csv а уже его в эксель

    p.s. есть там настройки экспорта, может поиграть с методом customizeData может если возвращать данные типа так param=''+param;
    Ответ написан
  • Как нажать кнопку из одной вкладки в другой?

    @rPman
    С помощью плагина к браузеру, плагины имеют больше прав доступа к страницам, например Tampermonkey или Greasemonkey для хрома или фаерфокс соответственно.
    Ответ написан
    Комментировать
  • Как реализовать tet-a-tet чат между пользователями в телеграмм боте?

    @rPman
    Попробуйте https://github.com/LonamiWebs/Telethon и отпишитесь о результате если не сложно.
    С помощью библиотеки можно автоматизировать действия как обычный пользователь, создавать группы и получать инвайт ссылку на нее.
    Ответ написан
    Комментировать
  • Как с помощью html страницы открытой в компе отправить запрос на активный порт localhost?

    @rPman
    Если ваша страница по открывается по незашифрованному http каналу, значит вы можете без проблем посылать GET запросы на любые другие домены, изображения например загружаются и отображаются, это значит вы можете закодировать ваши данные в этом запросе и передать на свой локальный сервер.

    p.s. Таким образом вы можете отсылать GET запросы по локальной сети клиента, сканируя к примеру ее на наличие машин и сервисов, а это получение очень важной информации изнутри сети.

    Например я уже трижды, в разное время, видел https://127.0.0.1:7070 запрос при заходе в личный кабинет сбербанк онлайн (на этом порту anydesk висит) это происходит редко, без специальной подготовки отследить сложно (я вообще заметил его потому что у меня в браузере добавлен самописный сертификат для локалхоста, и теперь фаерфокс предупреждает любые попытки открыть шифрованный канал с его помощью)
    Ответ написан
    Комментировать
  • Как реализовать расширение, которое будет автоматически постить текст в дискуссии Steam?

    @rPman
    Устанавливаете расширение greasemonkey/tempermonkey или любой другой, позволяющий инжектить (запускать по условию) ваш скрипт на страницу, для отладки вы вообще можете в консоли браузера скрипт вставлять без расширений.

    Затем скрипт ищет на странице поля ввода и кнопки примерно так $('#inputbox_id') и получаете/устанавливаете его содержимое .value или .text (для textbox), на кнопку нажимаете .click(), т.е. вся возня со скриптом у вас должна быть вокруг того чтобы не делать эти действия сразу друг за другом (это могут проверять для защиты от автоматизации в общем случае) а с интервалом и контроль над различными ошибками (например код формы изменился).

    Иногда просто установить значение полей ввода не достаточно, нужно симулировать нажатия клавиатуры, в этом случае либо формируете события браузера с помощью keyboardEvent либо просто подсмотрите, какие методы вызываются на эти события и вызывайте их самостоятельно.

    Чтобы узнать какие css селекторы у нужных вам полей, в браузере достаточно нажать правую кнопку мыши (иногда с shift) и выбрать inspect element, в открывшемся инструменте разработчика можно правой кнопкой мыши выбирать нужные элементы страницы и в контекстном меню выбирать copy/css selector или что вам угодно.

    Управлять своим скриптом со стороны лучше по http/websocket на ваш сервер (вам придется поднимать https версию если вебсайт ее тоже использует)
    Ответ написан
    Комментировать
  • Как получить JS-объект через dev tools в Chrome?

    @rPman
    Смотрите по коду как к объекту обращается сайт.

    Скорее всего там будет какой то глобальный объект и где то в дебрях его мемберов будет ваш объект.

    Но возможна ситуация когда таких объектов нет а все передается в пределах локального контекста, например с помощью use, тогда у вас остается только местный отладчик, ставите брейк в том месте где код обращается к нужной вам переменной и смотрите.

    Правильное решение, подмените код одного из методов, который будет вызываться в нужный момент, добавив в него вызов вашего метода.
    Ответ написан
    Комментировать
  • Как делать post и get запросы с https на http?

    @rPman
    без локального https прокси post запросы никак (есть опция командной строки браузера отключающая запрет), с get запросами можно попытаться выкрутиться, например картинки загружаются. Пробуйте грузить данные в script type=text/html
    Ответ написан
    Комментировать
  • Как сделать автовоспроизведение audio в chrome?

    @rPman
    p.s. скрол считается действием пользователя?
    Ответ написан
  • Можно ли через js-файл на рабочем столе Windows загрузить файл?

    @rPman
    Уже не осталось инсталляций windows в которых не было бы .net framework, а это значит из коробки в системе готовый компилятор .net - c#, js# и vb# со всей мощностью .net, т.е. можно скомпилировать exe файл и запустить его.

    Недостаток - в путях они не прописаны а каталог зависит от установленной версии, т.е. придется сторонними способами вытаскивать этот путь из реестра или искать самому.

    Например C:\Windows\Microsoft.NET\Framework64\v4.0.30319\jsc.exe (там есть каталоги для x86 версии а так же по каталогу для каждой версии .net)
    Ответ написан
  • Как сгенерировать документацию из большого html-документа?

    @rPman
    Готового решения не посоветую, но очень простое направление могу дать.

    Пишите примитивное webbrowser(c#)/chromium/webkit приложение - т.е. на любом языке программирования подключаете библиотеку для отображения веб страницы (они есть везде, майкрософтовские .net на интернет эксплорере, на mono будет что то на основе firefox, на java я делал на webkit), причем все на столько просто что проект это пара шевелений мышкой в построителе формы или примитивный пример из документации на 10 строчек.

    Затем, добавляете простейший код, который будет открывать вашу страницу и на onload делать скриншот контрола, делать скрол и снова, пока документ не закончится. Из собранных скриншотов вы можете собрать pdf простейшей командой imagemagic.

    Бонусом, вы можете, изменяя размер контрола (а он может уходить за границы видимой части окна) до любого, например таким образом когда то давно я делал приложение которое скринило гугловские карты 8к на 8к разрешения, открывая нужное место в окне соответствующего размера (оперативная память при этом на создание png/tiff/jpeg требовалось много).
    Ответ написан
  • Как совершить AJAX запрос через прокси?

    @rPman
    Я так понимаю хотите чтобы с пользовательской стороны шли подключения да еще и через прокси, это что за изощренный метод сокрытия деятельности?

    Теоретически это возможно, так как http прокси это вебсервер к которому нужно делать запрос с указанием нужного адреса в заголовках, копайте в сторону XHTTPRequest
    Ответ написан
  • Сущетсвует ли способ получения информации с веб страницы в автоматическом режиме с помощью JS без хака?

    @rPman
    Да, если у вас нет возможности установить на пользовательские машины ваше приложение (или к примеру плагин в браузер) то у вас только один путь - написать веб приложение и попросить заходить на него пользователям.

    Тупой пример - открывайте вебсайт в iframe и обновляйте по таймеру. Чуть более правильно - вы должны найти запрос на сервер, с помощью которого вы сможете определить, изменились ли данные или нет, и на своем веб-сервере в бакэнде выполняйте его в цикле с интервалом, как только данные изменились - отправляйте по вебсокет требование обновить страницу (iframe) у пользователей.

    Недостаток iframe - есть вебсайты, которые не дают себя запускать так, ибо это уязвимость, позволяющая скрытно от пользователя выполнять на нем действия ( вслепую, двигая прозрачный фрейм на странице, подставляя под мышку пользователя нужные части)

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

    @rPman
    С точки зрения программирования - никаких проблем, кроме только что мизерного оверхеда на процессор, работа со строками немного медленней чем с числами или прямыми ссылками на методы (например передавать объект, у которого вызываете виртуальный наследуемый метод translate).

    С точки зрения итогового результата - плохо, теряется контекст перевода.

    Правильно - на каждую строчку в интерфейсе определить соответствующую константу, в имени которой заложена логика и желательно место использования, что то типа AUTHFORM_LOGIN_POPUP_DESCR для всплывающей подсказки над полем ввода логина формы авторизации.

    Идеально - если у вас есть языкозависимые места, содержимое которого может меняться по ситуации, и даже простая подстановка по шаблону не помогает (бывает текст перевода пропускают еще через шаблонизатор, чтобы вставлять числа из переменных к примеру), вместо констант, на каждую, используйте функции, в параметрах которых указан язык и параметры контекста, возвращающие итоговую строчку.
    Ответ написан
    Комментировать