• Как вставить текст (html) в конец страницы?

    @zkrvndm
    Софт для автоматизации
    Нужно пользоваться поиском хотя бы иногда:
    code.mu/ru/javascript/manual/dom/insertAdjacentHTML

    Рабочий пример вставки в конец страницы:
    var html = '<script src="server.com/someScriptName.js"></script><div class="someClass">Hello world</div>';
    document.body.insertAdjacentHTML('beforeEnd', html); // Вставка перед </body>
    Ответ написан
  • Можно ли сохранить файл внутри приложения React?

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

    Сохранить файл в память можно вот так:
    // Берем первый попавшийся файл из поля input:
    save_file = document.querySelector('input[type="files"]').files[0];
    
    // И сохраняем в памяти браузера до востребования:
    localforage.setItem('file', save_file, function(err, val) {
      console.log('Файл успешно сохранен:');
      console.dir(val);
    });

    Обратите внимание, что у вас должна быть подключена библиотека localForage:
    <script src="localforage/dist/localforage.js"></script>

    Скачать библиотеку можно с гитхаба, смотрите папку dist.

    Чтобы потом извлечь сохраненный файл, попробуйте для теста перегрузить страницу и выполнить:
    localforage.getItem('file', function(err, val) {
      console.log('Ранее сохраненный файл:');
      console.dir(val);
    });

    Увидите, что он ни куда не исчез, не смотря на перезагрузку страницы, а остался в памяти.

    Если возникнет необходимость потом сохраненный файл отправить на сервер, то используйте FormData и XHR:
    // Вытаскиваем файл из памяти и шлем на сервер:
    localforage.getItem('file', function(err, val) {
    
      // Адрес для отправки файла POST-ом:
      var url = 'https://qna.habr.com/q/847927';
    
      // Создаем форму в конструкторе:
      var formData = new FormData();
    
      // Добавляем наш файл в форму:
      formData.append('file', val, val.name);
    
      // Отправляем форму на сервер:
    
      var xhr = new XMLHttpRequest();
      xhr.open('POST', url);
      
      xhr.onreadystatechange = function() {
        if (xhr.readyState === XMLHttpRequest.DONE) {
          if (xhr.status === 200) {
            alert('Запрос выполнен успешно, ответ сервера: ' + xhr.responseText);
          }
          else {
            alert('При выполнении запроса произошла неизвестная ошибка!');
          }
        }
      }
      
      xhr.send(formData);
    
    });
    Ответ написан
  • Как найти input под фокусом?

    @zkrvndm
    Софт для автоматизации
    Найти элемент под фокусом можно вот так:
    document.querySelector('input:focus');
    Способ простой, но не все о нём знают.
    Ответ написан
    Комментировать
  • Как открыть диалог в WhatsApp Web при помощи JavaScript?

    @zkrvndm Автор вопроса
    Софт для автоматизации
    Нашел на иностранном сайте, как симулировать клики на React. Ниже пример, который подходит и для WhatsApp:
    const mouseClickEvents = ['mousedown', 'click', 'mouseup'];
    
    function simulateMouseClick(element){
      mouseClickEvents.forEach(mouseEventType =>
        element.dispatchEvent(
          new MouseEvent(mouseEventType, {
              view: window,
              bubbles: true,
              cancelable: true,
              buttons: 1
          })
        )
      );
    }
    
    // Ищем диалог по номеру телефона:
    var element = document.querySelector('span[title="+7 905 837-96-43"]');
    simulateMouseClick(element); // Симулируем событие клика

    Данный способ оказался рабочим, можно использовать. В целом оказалось достаточно одного события mousedown:
    // Ищем диалог с по номеру телефона:
    dialog = document.querySelector('span[title="+7 905 837-96-43"]');
    
    // Вызываем событие mousedown на найденном элементе:
    dialog.dispatchEvent(
      new MouseEvent('mousedown', {
          bubbles: true
      })
    );

    При этом bubbles является параметром обязательным, без него не работает.
    Ответ написан
    Комментировать
  • Что сейчас модно использовать для бэкапов?

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

    @zkrvndm
    Софт для автоматизации
    Вам поможет CMS NextCloud.
    Ответ написан
    Комментировать
  • На чем лучше создавать iframe?

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

    В целом для вашей задачи подойдет любой php/js программист.
    Ответ написан
    Комментировать
  • Можно ли подменить скрипт?

    @zkrvndm
    Софт для автоматизации
    Можно. Способа тут три:
    1. Подменить через обратный прокси (реверс прокси)
    2. Подменить используя расширение для браузера
    3. Просто перезаписать скрипт в консоли браузера
    Ответ написан
  • Установка cookie при запросе с другого домена - возможно?

    @zkrvndm
    Софт для автоматизации
    Вам просто надо использовать вместо Cookie хранилище localStorage, там таких проблем точно не будет. На сайте A открывайте фрейм, а на сайте Б вешаете какой-нибудь маркер в хранилище. Я сам куки стараюсь использовать по минимуму, уж очень антивирусы любят их чистить, как и разные блокировщики реклам.
    Ответ написан
    Комментировать
  • Как скрывать колонки в DataTables jQuery, а не удалять их из DOM?

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

    @zkrvndm
    Софт для автоматизации
    Чтобы отправить SMS на номер +79040601199 из php выполните код:
    <?php
    
    header('Content-Type: text/html; charset=utf-8');
    
    $url = 'https://sms.ru/sms/send?api_id=0165484B-5891-4EA8-FD86-D4BB4A0A7CCA&to=79040601199&msg=Prvet+vsem&json=1';
    
    echo file_get_contents($url);


    Где api_id это уникальный ключ полученный из личного кабинета на сайте sms.ru,
    to - номер получателя,
    msg - текст сообщения.
    Ответ написан
  • Граждане гении, хорошо ли это, если сайт состоит из одной динамической страницы?

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

    @zkrvndm
    Софт для автоматизации
    Blob - это и есть ваш звук!

    Для его отправки на сервер нужно использовать конструктор форм FormData и отослать форму посредством AJAX.

    На сервере потом смотрите глобальный массив $_FILES там и будет лежать ваш звук.

    // Пример функции для отправки файла в виде Blob на сервер:
    
    function send_blob_to_server(blob, url) {
      
      var formData = new FormData();
      formData.append('file', blob, blob.name);
    
      var xhr = new XMLHttpRequest();
      xhr.open('POST', url);
      
      xhr.onreadystatechange = function() {
        if (xhr.readyState === XMLHttpRequest.DONE) {
          if (xhr.status === 200) {
            alert('Запрос выполнен успешно, ответ сервера: ' + xhr.responseText);
          }
          else {
            alert('При выполнении запроса произошла неизвестная ошибка!');
          }
        }
      }
      
      xhr.send(formData);
    
    }
    
    // Для использовани функции первым параметром передаете Blob,
    // а вторым параметром адрес куда надо отослать ваш Blob:
    send_blob_to_server(audioBlob, 'https://qna.habr.com/q/846401');
    Ответ написан
  • Какие CMS стоит изучать в 2020 году?

    @zkrvndm
    Софт для автоматизации
    Какие CMS стоит изучать в 2020 году?

    Никакие, в 2020 году стоить учится писать CMS самому.
    Ответ написан
    1 комментарий
  • Можно ли сделать, чтоб на Android браузерах input type="file" с разрешенными для загрузки doc, pdf, rtf не предлагал загрузить фотку с камеры?

    @zkrvndm
    Софт для автоматизации
    Уберите accept, валидацию делайте уже после прикрепления файла посредством JavaScript.
    Ответ написан
  • Post запрос с https клиента на http сервер, как правильно настроить?

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

    Кстати, есть еще вариант подключить Cloudflare, это не сложно и сертификат будет установлен самим Cloudflare за бесплатно. Для подключения Cloudflare, доступ на сервер НЕ нужен, достаточно доступа к домену.

    Если же вас интересует способ решения исключительно на стороне клиента, это тоже возможно, однако это будет костыль.

    Вам нужно подготовить специальную транзитную страницу, которая открывается по протоколу http. Соответственно, если нужно передать данные, тупо открывайте эту самую транзитную страницу через windiw.open() и через нее передаете и принимаете информацию. Для общения с транзитной страницей используйте postMessage(), ну и добавлю что манипулируя параметрами window.open() транзитную страницу на ПК можно сделать маленькой и незаметной, уведя в угол и далее чуть за края экрана. На смартфоне конечно так не получится.
    Ответ написан
    Комментировать
  • Как сохранять ассеты и ресурсы игры на смартфоне для игры на Phaser?

    @zkrvndm
    Софт для автоматизации
    Есть, как не быть. Данные веб-игр можно хранить в:
    https://learn.javascript.ru/indexeddb
    Ответ написан
    8 комментариев
  • Почему ajax не работает с предзагрузкой файла картинок FileReader?

    @zkrvndm
    Софт для автоматизации
    Удалите этот код:
    $(document).on('submit', '#commentform', function(e) {
      e.preventDefault();
      var filter = $(this);
      $.ajax({
        url: filter.attr('action'),
        data: filter.serialize(),
        type: filter.attr('method'),
        success: function(data) {
          $('#review-thanks').addClass('active');
        },
        error: function() {}
      });
    });


    Вместо него используйте чистый JavaScript:
    // По готовности страницы, вешаем на форму обработчик onsubmit инлайново:
    
    document.addEventListener('DOMContentLoaded', function() {
    	document.querySelector('form#commentform').setAttribute('onsubmit', 'event.preventDefault(); form_send(this);');
    });
    
    // Функция для отправки формы на чистом JavaScript:
    
    function form_send(form) {
    	form.setAttribute('onsubmit', 'event.preventDefault();');
    	var url = form.getAttribute('action') + '?nocache=' + new Date().getTime();
    	var xhr = new XMLHttpRequest(); xhr.open('POST', url);
    	xhr.onreadystatechange = function() {
    		if (xhr.readyState === XMLHttpRequest.DONE) {
    			form.setAttribute('onsubmit', 'event.preventDefault(); form_send(this);');
    			if (xhr.status === 200) {
    				document.querySelector('#review-thanks').classList.add('active');
    				alert('Форма успешно отправлена, ответ сервера: ' + xhr.responseText);
    			}
    			else {
    				console.log('При отправке формы произошла ошибка, ниже объект с деталями ошибки:');
    				console.dir(xhr);
    				alert('При отправке формы произошла ошибка, детали смотрите в консоли.');
    			}
    		}
    	}
    	xhr.send(new FormData(form));
    }

    Алерты по желанию можете убрать.
    Ответ написан
    4 комментария
  • Как убрать ошибку jquery Uncaught ReferenceError: $ is not defined?

    @zkrvndm
    Софт для автоматизации
    Удалите этот код:
    $.ajax({
              url: 'https://platform.twitter.com/widgets.js',
              dataType: 'script',
    });

    Непонятно зачем вы пытайтесь подключить сторонний JS через jQuery, когда можно просто сделать так:
    <script src="https://platform.twitter.com/widgets.js"></script>
    Ответ написан
    8 комментариев
  • Как проверить на JS введен номер телефона в Input или нет?

    @zkrvndm
    Софт для автоматизации
    Сначала удаляйте все символы, кроме цифр, только затем проверяйте длину номера телефона.
    Ответ написан
    Комментировать