• Есть ли скрипт для изменения определённого текста в коде страницы?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    magesypro.com##.active.mdpDeblocker-the-modal.mdpDeblocker-modal
    magesypro.com##body:remove-class(mdpDeblocker-blur)
    magesypro.com##.mdpDeblocker-wrapper
    magesypro.com##.mdpDeblocker-blackout


    Правила, после которых всё стало хорошо (использовал uBlock Origin в Firefox).
    Ответ написан
    1 комментарий
  • Есть ли скрипт для изменения определённого текста в коде страницы?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Можно проще - воспользоваться расширением Stylus - оно позволяет внедрять на страницы свои стили.
    Просто добавляете стиль display:none!important для этого элемента.
    Или filter:none!important
    Ответ написан
    5 комментариев
  • Что-то странное в действиях Гугл и на смартфоне. Что это?

    @Maj1 Автор вопроса
    Разобрался что происходит. Информация в журнал действий с аккаунтом приходит не сразу, а с задержкой. Вы можете открыть, например, приложение вконтакте в 13:52, WhatsApp в 14:01 и Сбербанк в 14:36, а в журнале вы увидите это только в 18:10 этого же дня. В 18:10 в журнале появятся 3 записи о том, что в 18:10 было использовано приложение вконтакте, WhatsApp и Сбербанк.
    Ответ написан
    Комментировать
  • Что не так с попыткой прописать выполнение cmd в автозагрузку?

    @rPman
    поднять галку "Запуск от имени Администратора"
    во первых в этом случае запрос превышения прав будет всплывать каждый раз при запуске

    Во вторых, правильно, создавать задачу в планировщике задач, там же и указывать условие запуска (можно без условия), и под каким пользователем, включая превышение прав.

    Для запуска уже настроенной задачи без условия запуска можно использовать консольную команду schtasks /run
    Ответ написан
    1 комментарий
  • Чем отличается событие клика от button.click();?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    Чем отличается событие клика от button.click()

    Событие вызывается когда пользователь нажмёт на кнопку.
    button.click() - программный тригер клика на кнопке без участия пользователя. То есть клик из под скрипта.

    Объект event, который пробросится в обработчик клика будет не одинаковый.
    Например, будет отличаться свойство isTrusted - у программного клика будет false.

    Ну и не на всё можно сделать клик програмно.

    Как вообще сформулировать гуглу запрос на эту тему, что бы статью какую-то почитать

    - События и обработка событий в javascript.
    - Эвент луп, микро и макро таски

    Ну и обо всём в js стоит начинать поиск отсюда https://learn.javascript.ru/
    Например, события - https://learn.javascript.ru/introduction-browser-events

    Вот тут вроде описано почему разные результат между пользовательским кликом и программным. Рекомендую всю статью к изучению
    https://jakearchibald.com/2015/tasks-microtasks-qu...
    Перевод на хабре: https://habr.com/ru/post/264993/
    Ответ написан
    Комментировать
  • Как в Chrome сделать главную(дефолтовую, первую, пустую) страницу чтобы на ней было 100500 ярлыков?

    @rPman
    Создать html файл со ссылками (при необходимости иконки не делать, у тебя ведь 100500 их) и прописать его как домашню страницу file:///Temp/test.html

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

    Недостаток, если нужно красиво а не просто список, то надо чуток понимать css/html
    Ответ написан
    6 комментариев
  • Переименование файлов по таблице соответствий?

    @rPman
    Берете вашу таблицу, добавляете одну колонку слева от ваших двух (старое, новое) и заполняете ее словом rename.
    p.s. Если в именах файлов есть пробелы или символы типа слешей, скобок и прочее (не буквы и цифры) то каждое имя должно быть заключено в двойные ковычки (100 и один способ сделать это).

    Затем выделяете все ячейки и копируете их в буфер, затем открываете ваш любимый текстовый редактор и вставляете туда содержимое буфера (альтернатива, сохранить файл csv или текст msdos, поэкспериментируйте).

    Должно получиться что то типа:
    rename old.txt new.txt
    rename old2.txt new.txt
    Затем сохраняете этот файл под каким-нибудь именем с расширением .bat (например go.bat) или .cmd в каталог, где лежат файлы.

    Внимание, кодировка файлов должна быть msdos (cp866) если у вас есть русскоязычные символы в именах файлов. Следите чтобы это не была unicode, а точнее чтобы в начале файла ваш редактор не вставил BOM сигнатуру, это не фатально, просто первая строчка тогда будет ошибочной и будет проигнорирована.

    Все, ваша программа по переименовыванию файлов готова, достаточно ее запустить и ваши файлы будут переименованы.

    Если хотите посмотреть сообщения об ошибках, заранее добавьте в конец файла строчку со словом
    pause
    тогда консольное окно не будет закрыто по завершению и вы увидите сообщения об ошибках.

    Если файлы лежат в разных каталогах, то можно для каждого указывать либо полный путь типа c:\temp\zzz.txt либо относительный temp\aaa.zzz в этом случае go.bat должен быть размещен в этом начальном каталоге, где размещены все остальные.

    Если первое слово в строке будет move вместо rename, то эта программа переместит файл со старого места на новое, а copy - скопирует, причем в обоих случаях можно вместо нового имени файла указать только целевой каталог.
    Ответ написан
    1 комментарий
  • Как с помощью js заполнить шаблон Word?

    @MikhedValery
    В шаблоне docx пометить поля для вставки {field1} {field2} и т.д. закрыть
    В вашей программе
    docx - открыть как обычный архив, достать из него файл word/document.xml
    Подправить заменой как обычный текст. (Сначала с помощью регулярных выражений лишние '<.*?>')

    Например я непосредственно в JSzip пробовал
    function isprXML(xmlfile) {
                // //почистить шаблон до правильного вида переменных {field1}
                var re = /({.*?})/sg;
                var re2 = /(<.*?>)/g;;
                let result = xmlfile.match(re) || [];
                let newres = [];
                result.forEach(element => {
                    var newel = element.replace(re2, "");
                    xmlfile = xmlfile.replace(element, newel);
                });
                return xmlfile;
            }


    Затем просто менять поля {field1} на ваши данные
    xmlfile = xmlfile.replace("field1", data);

    word/document.xml - Положить обратно в архив

    Здесь пример на JS - работает прямо в браузере
    Ответ написан
    4 комментария
  • Могу ли я в чистом javascript в асинхронной функции подождать возникновения события?

    lazalu68
    @lazalu68
    Salmon
    Конечно можете. После await у вас должен идти промис, который будет ресолвиться из обработчика события. Если речь о событиях DOM, то как-то так:

    HTMLElement.prototype.waitFor = function(event_name) {
        if (event_name) {
            return new Promise((res, rej) => {
            	const listener = function() {
            		res()
            		this.removeEventListener(event_name, listener)
            	};
    
            	this.addEventListener(event_name, listener);
            })
        } else {
            throw 'No event passed to waitFor method!';
        }
    }
    
    async function foo() {
    	const start = new Date();
    	await document.querySelector('body').waitFor('click');
    	console.log('uspeshno dojdalis clicka, jdali celih ' + ((new Date().getTime() - start.getTime())/1000) + ' sekund');
    }
    
    foo();
    Ответ написан
    7 комментариев
  • Как забрать данные из промиса?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Нет, это не промис, это асинхронная функция, которая отдает свой результат в колбэк, как правило такая функция ничего не возвращает, а значит и await'ить нечего, так как await требует метод then у результата выражения справа.
    Но можно это обернуть в промис:
    async function checkUser(login, password) {
        const ad = new ActiveDirectory(ad_config)
        const auth = await new Promise((resolve, reject) => {
            ad.authenticate(login, password, (err, auth) => {
                if (err) {
                    return reject(err)
                }
                resolve(auth)
            })
        })
        return auth
    }
    Ответ написан
    1 комментарий
  • Сохраняет ли navigator.clipboard.write стиль текста?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    el.innerHTML использовать

    UPD. Да это у меня чувство юмора дебильное ))
    Вот так попробуйте: https://nemecek.be/blog/156/how-to-copy-html-to-cl...
    Ответ написан
    3 комментария
  • Сохраняет ли navigator.clipboard.write стиль текста?

    bitrix24info
    @bitrix24info Автор вопроса
    Эксперт Битрикс24
    Спасибо Алексей Ярков, это работает для меня:
    function setClipboard(text) {
        const type = "text/html";
        const blob = new Blob([text], { type });
        const data = [new ClipboardItem({ [type]: blob })];
        navigator.clipboard.write(data).then(
            function () {
                console.log('/* success */');
            },
            function (err) {
                console.log(err);
            }
        );
    }
    Ответ написан
    1 комментарий
  • Что означает "!!~"?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Сокращалка, удобная для indexOf(), который возвращает -1 если не найдено, или индекс от 0 и больше.

    Для логики приложения часто бывает нужно узнать только, найдено или нет: т.е. -1 или иное значение. Можно просто сравнивать if (a.indexOf(b) > -1) { /* найдено! */ } но иногда хочется короче.

    Битовый оператор НЕ ~ хорош тем, что выделяет -1: только -1 с этим оператором даст 0. Прочие числа дадут какое-то ненулевое значение.

    ~(-1) === 0

    Остаётся привести значение из численного в булево. Для этого два воскл. знака — два логических НЕ.
    • для варианта «найдено» из числа от 0 и больше получилось тоже ненулевое число, и !! даст true
    • для варианта «не найдено» из -1 получится уникальный 0, и !!0 вернёт false
    Ответ написан
    4 комментария
  • Как работает сервис поиска по упоминаниям в соц сетях?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    а из конкретных Фейсбука и Вконтакте, к примеру? Тупо парсинг? API? Некое сочетание того и другого?
    Только парсинг, только хардкор. АПИ не дают доступа к постам и перепискам, все ручками, благо там не сказать что какой-то слишком сложный алгоритм. Да, есть нюансы с авторизацией и аккаунтами, спам траффиком и прочими похожими проблемами, но в целом достаточно тривиальная работа краулера. Скорее всего часть тащится обычными запросами из курла, а часть вытаскивается через условный вебдрайвер, а ля пупитир или селениум.
    Ответ написан
    Комментировать
  • Как определить высоту iframe?

    DenVdmj
    @DenVdmj
    Javascript, Perl, Lua, etc.
    Текущую высоту body не проблема взять, это scrollHeight. Так что можно, например, в onload iframe выставлять высоту body содержащегося в нем документа:
    this.height = this.contentWindow.document.body.scrollHeight + 'px';

    Но ориджин src ай-фрейма должен совпадать с location.origin нашего документа, то есть запрос не должен быть кроссдоменным, и вот это уже проблема.
    Ответ написан
    Комментировать
  • Как через userscripts запретить внедрение JavaScript от сайта?

    WblCHA
    @WblCHA
    На элемент, где висит обработчик событий, тебе надо повесить:
    .addEventListener('click', event => {
      event.stopPropagation()
      ...
    }, true);

    Третим аргументом обязательно передать true ( https://developer.mozilla.org/ru/docs/Web/API/Even... ).
    Ответ написан
    4 комментария
  • Есть ли программа для поиска слов по маске в txt?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Как уже подсказал Владимир Куц - grep. Это и есть та самая утилита, без наворотов. Если есть проблемы с командной строкой, можно еще погуглить "Windows grep gui"(если вы используете Windows). Пример: 6 Best GUI grep implementations for Windows as of 2021

    Есть еще "funduc search and replace". С одной стороны простая утилита, с другой мощная:
    602257964421b392566361.png
    Ответ написан
    1 комментарий
  • Как скопировать canvas в буфер обмена?

    sslion
    @sslion
    canvas.toBlob(blob => navigator.clipboard.write([new ClipboardItem({'image/png': blob})]));
    Ответ написан
    Комментировать
  • Как вывести текущую дату на русском языке?

    @ivashjke
    Vue JS, React, React Native
    const ruDate = new Intl.DateTimeFormat("ru", {day: "numeric", month: "long", year: "numeric", weekday: "long"}).format(new Date()).replace(/(\s?\г\.?)/, "")
    Ответ написан
    2 комментария
  • Почему не работает регулярное выражение?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Смотрите. У вас в файле абзацы по-другому устроены и при копировании они заменяются на виндовый формат.
    Ваш регексп можно чуточку упростить:
    ^(.{0,7})\r\n|^([0-9]{8})\r\n
    Для того, чтобы регексп работал на данном файле с теми абзацами что там есть, нужно использовать \n вместо \r\n.
    Ещё раз...
    В файле абзацы состоят из символа "OA". Ваш регексп в качестве абзацев ожидает пары "OD 0A". При копировании\вставке текста в редакторе в новый файл абзацы заменяются на станартные для данной ОС и данного редактора. Ваш редактор поддерживает юникс-формат абзацев, но по умолчанию использует именно виновый из двух символов. Вы можете сделать регексп универсальным поставив вопросик после символа \r.
    Ответ написан
    6 комментариев