• Чем отличается событие клика от 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 - работает прямо в браузере
    Ответ написан
    2 комментария
  • Могу ли я в чистом 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 комментариев
  • Как открывать ссылки microsoft-edge: в Firefox (или другим браузером)?

    @Konf
    Редактирую ответы на 2 + 2 по 4 раза
    EdgeDeflector

    60a01b1958728520088048.png
    EdgeDeflector регистрируется как программа, способная открывать эти специальные microsoft-edge ссылки. Когда вы нажимаете на одну из этих ссылок после установки EdgeDeflector, Windows спросит вас, как вы хотите открыть ссылку. Выбрав EdgeDeflector, он скрыто изменит ссылку так, чтобы она стала обычной веб-ссылкой, и передаст ее обратно в Windows. Затем Windows откроет ссылку в вашем веб-браузере по умолчанию - будь то Firefox, Chrome, Vivaldi, Microsoft Edge или что-либо ещё

    Подробнее

    Важно: автор предупреждает что после крупных обновлений Windows может потребоваться переустановка этой утилиты
    Ответ написан
    2 комментария
  • Как извлечь текст из строки?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    В Таблицах часто используют REPT для генерации выражения REGEXEXTRACT

    =INDEX(JOIN(",";
      REGEXEXTRACT(
        B2;
        REPT(".*/(\d+)";COUNTA(SPLIT(B2;"Руб";0))-1)
      ) & "см"
    ))


    6090860d4fcf8248486011.png
    Ответ написан
    1 комментарий
  • Как из текста со смешанным алфавитом сделать нормальный?

    @alekssamos Автор вопроса
    Программист любитель
    Помог код из этой статьи. Сделал дополнение textnormalizer.
    Ответ написан
    Комментировать
  • Как подсветить текст с помощью JS или CSS?

    MrDecoy
    @MrDecoy Куратор тега CSS
    Верставший фронтендер
    Вот как пример, а там уже дальше сами докрутите как Вам надо. Можно класс навешивать(element.classList.add('class')) и снимать по таймеру(setTimeout(){}), можете оставить как в демке - тогда будет мигать после первого нажатия по ссылке и после каждого нажатия по ссылке, если текущий хэш не #footer.
    Ответ написан
    1 комментарий