• Как отказаться от jquery и jquery библиотек?

    @zkrvndm
    Софт для автоматизации
    Я сам когда пишу расширения, не использую jQuery, но jQuery необходим когда пилишь сайты и заказчик просит, чтобы функционал корректно работал и в старых браузерах. Как по мне jQuery это самый просто способ обеспечить какую-никакую, но кроссбраузерность.
    Ответ написан
    Комментировать
  • Как подключить (аналог php include) html файл в js?

    @zkrvndm
    Софт для автоматизации
    Если на сайте подключен jQuery, то просто используйте метод load, чтобы вставить HTML файл внутрь нужного вам блока:
    https://basicweb.ru/jquery/jquery_method_load.php

    Пример:
    $('.top-section').load('hello.html');
    Ответ написан
    1 комментарий
  • Отправка заявок SMTP или другой вариант?

    @zkrvndm
    Софт для автоматизации
    Вам просто нужно на хостинге поднять свою собственную почту и уже его использовать для отправки. Ну а для ленивых есть уведомления через телеграм, отправлять которые самому себе можно без ограничений.
    Ответ написан
    Комментировать
  • Как изменить заголовок страницы до загрузки DOM (расширение Chrome)?

    @zkrvndm
    Софт для автоматизации
    Это конечно можно сделать, но только через костыль. Укажите в манифесте расширения опцию run_at со значением document_start, чтобы ваш контент-скрипт запускался до готовности документа:
    {
    	
    	"name" : "Имя расширения",
    	
    	"manifest_version" : 2,
    	
    	// ............................
    	
    	"content_scripts" : [
    		
    		{	
    			"matches" : [ "https://*.site.ru/*", ],
    			"run_at": "document_start",
    			"js" : [ "content-script.js" ]
    		}
    		
    	]
    	
    }

    Далее в контент-скрипте вызывайте:
    document.write('');
    document.close();

    Это мгновенно перезапишет содержимое страницы пустотой, а дальше делайте с ней (со страницей), что хотите.

    P. S. Зачем вам это нужно, если не секрет? Может другое решение подскажу.
    Ответ написан
    5 комментариев
  • Какой есть чат для сайта с API и приложением?

    @zkrvndm
    Софт для автоматизации
    Вам подойдет любой чат не использующий iframe. Просто посмотрите топ 10 чатов, если в каком-то из них чат выводится НЕ при помощи iframe, то в такой чат можно легко и просто JavaScript кодом на вашей стороне дописать данные о размерах колес.
    Ответ написан
    1 комментарий
  • Не срабатывает скрипт загрузки файлов, как исправить?

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

    @zkrvndm
    Софт для автоматизации
    Допустим в переменной html лежит ответ сервера и нужно извлечь из него только таблицу id="myTable"

    Делается это следующим образом:
    table = new DOMParser().parseFromString(html, 'text/html').querySelector('table[id="myTable"]').outerHTML;
    console.log("Таблица успешно извлечена: \n" + table);
    Ответ написан
    1 комментарий
  • Как правильно хранить Blob в бд?

    @zkrvndm
    Софт для автоматизации
    Если дело происходит в браузере, можно файлы сохранить в IndexedDB и они там будут оставаться даже после перезагрузки страницы. Для сохранения file в IndexedDB сначала подключайте на станице библиотеку localforage:
    <script src="https://cdnjs.cloudflare.com/ajax/libs/localforage/1.9.0/localforage.min.js"></script>


    Далее уже можно спокойно закинуть файл в память браузер вот так:
    async function saveFile(file) {
        var result = await localforage.setItem('file', file);
        console.log('Файл сохранён:');
        console.dir(result);
    }

    Вызывайте функцию saveFile передав ему аргументом тот файл, который надо сохранить.

    Чтобы потом извлечь этот файл из памяти и вставить в тег src у картинки:
    async function getFile() {
        var file = await localforage.getItem('file');
        document.querySelectror('img').src = URL.createObjectURL(file);
        console.log('Файл вставлен:');
        console.dir(file);
    }

    Просто вызывайте функцию getFile.

    Подробнее о библиотеке localforage можно почитать здесь:
    https://html5.by/blog/localforage/

    Выше просто примеры. Чтобы допилить под себя рекомендую ознакомится с тем, что такое промисы и чем отличаются асинхронные функции от обычных + постараться понять, как работает async / await.
    Ответ написан
  • Как через userscripts запретить внедрение JavaScript от сайта?

    @zkrvndm
    Софт для автоматизации
    Вы можете легко переписать скрипты ВКонтакте на свои через контент-скрипт / UserScript, просто объявляете свою функцию и она тупо заменит функцию от ВКонтакте.

    Пример объявления функции test() через контент-скрипт / UserScript:
    var script = document.createElement('script');
    script.innerHTML = `function test() {
        // Ваш код
    }`;
    document.head.appendChild(script);

    Разумеется объявлять надо уже после прогрузки скриптов от ВКонтакте, для этого используйте событие load.

    P. S. Осталось вам лишь найти функцию от ВКонтакте отвечающую за отправку данных) Для этого исследуйте обработчики, которые на кнопке висят при помощи инспектора хрома.
    Ответ написан
  • Есть ли полноценное серверное решения для запуска браузерного JS?

    @zkrvndm
    Софт для автоматизации
    Ты можешь на VDS запустить хром и там уже выполнять задачи нужные в плане отрисовки, сами задачи получать и отдавать по веб-сокету с того сервера, где твой сайт размещен. Так себе решение конечно, но если NodeJS не тянет нужные задачи, то боюсь это единственное доступное решение, хотя может кто еще что-нибудь посоветует.
    Ответ написан
    Комментировать
  • Как отправить данные на сервер с Ajax на чистом JavaScript?

    @zkrvndm
    Софт для автоматизации
    Отправку данных делаете так:
    spoiler
    // Ждем когда элементы на странице прогрузятся:
    
    document.addEventListener('DOMContentLoaded', function() {
    
    	// Вешаем на кпопку обработчик клика, чтобы при каждом клике
    	// сразу запускалась функц я dataSend отвечающая за отправку данных:
    	
    	document.querySelector('.button').addEventListener('click', dataSend);
    	
    });
    
    // Функция для отправки данных на сервер:
    
    async function dataSend() {
    
    	// Получаем данные с нужных нам полей в переменные:
    	
    	var loginValue = document.querySelector('.login').value
    	var emailValue = document.querySelector('.email').value
    	var passwordValue = document.querySelector('.password').value
    	var conf_passwordValue = document.querySelector('.conf_password').value
    
    	// Создаем объект с данными:
    
    	var data = {
    		'login': loginValue,
    		'email': emailValue,
    		'password': passwordValue,
    		'conf_password': conf_passwordValue
    	}
    
    	// Конвертируем объект в JSON:
    
    	var json = JSON.stringify(data);
    
    	// Отправялеям полученный JSON на сервер обычным POST-запросом:
    
    	var response = await (await fetch('https://yousite.ru/handler.php', {
    		'method': 'POST',
    		'headers': {
    			'Content-Type': 'application/json; charset=utf-8'
    		},
    		'body': json
    	})).text();
    
    	// Выводим ответ сервера в консоли:
    
    	console.log('Ответ сервера:');
    	console.log(response);
    
    }

    Замените только ссылку на php-обработчик на свой. Далее, принимать данные отправленные, как JSON надо по другому. Пример получения данных отправленных, как JSON:
    spoiler
    <?php
    
    // Включим показ ошибок:
    
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    
    // Считываем полученный JSON:
    
    $json = file_get_contents('php://input');
    
    // Раскодируем JSON в массив:
    
    $array = json_decode($json, true);
    
    // Выведем массив, чтобы посмотиеть, что в нем:
    
    header('Content-Type: text/plain; charset=UTF-8'); // Указыавем браузеру, что ответ будет обычным текстом
    echo "Из браузера получены следующие данные:\n"; // Выведем текст-предупреждение
    print_r($array); // Выведем все, что находится в массиве
    Ответ написан
    7 комментариев
  • Как изменить FormData?

    @zkrvndm
    Софт для автоматизации
    Это делается через контент-скрипт. При помощи контент-скрипт инжектиие на ВК свой код и уже далее через вставленный скрипт перехватываете POST-запросы, если надо - меняете.

    P. S. Просто я не уверен, что chrome.webRequest.onBeforeRequest позволяет редактировать тело запроса, посмотрите документацию - скорее всего не позволяет.
    Ответ написан
  • Как сделать, что бы Iframe грузился после того, как загрузится весь контент сайта?

    @zkrvndm
    Софт для автоматизации
    Там где должен быть фрейм вставь следующий скрипт:
    <script id="iframe_loader">
    	window.addEventListener('load', function() {
    		document.querySelector('#iframe_loader').outerHTML = '<iframe src="https://81adcaf58307d2589d4c66bdc2d7e3e8.customizer.amigo.ru" id="calcAmigo" height="640px" width="100%"></iframe>';
    	});
    </script>
    Ответ написан
    Комментировать
  • Как обновить html таблицу с php циклом?

    @zkrvndm
    Софт для автоматизации
    Если структура таблицы не меняется, вы можете полученную через AJAX таблцу распарсить через DOMParser, а далее тупо через querySelectorAll и цикл for перебрать все ячейки и обновить данные в вашей основной таблице.
    Ответ написан
  • Как правильно составить тело запроса при multipart/form-data?

    @zkrvndm Автор вопроса
    Софт для автоматизации
    Благодоря подсказе Alexandroppolus наконец удалось правильно собрать тело запроса, теперь все работает =)

    Пример ручной отправки файлов на сервер для будущих поколений:
    // Тестовый объект:
    
    test_obj = {
    	'per1': 'Привет!',
    	'per2': 'Это проверка!',
    	'per3': new File(['Привет, мир!'], 'test.txt', {type: 'text/plain'})
    };
    
    // Тестовая отправка:
    await multipartSend(test_obj);
    
    // Функция для отправки данных:
    
    async function multipartSend(obj) {
    	
    	// Генерируем уникальный разделитель:
    	var boundary = '----WebKitFormBoundary';
    	var symbols = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    	for (var i = 0; i < 18; i++) { boundary += symbols.charAt(Math.floor(Math.random() * symbols.length)); }
    
    	var arr = [ ]; // Массив для записи тела запроса
    	
    	// Перебираем свойства отправляемого объекта:
    	
    	for (key in obj) {
    		
    		// Если текущее свойство объекта строка или число:
    		
    		if (typeof obj[key] == 'string' || typeof obj[key] == 'number') {
    			
    			// Добавляем значение текущего параметра в массив как строку, разумеется вместе с разделителем и метаданными:
    			arr.push("--" + boundary + "\r\nContent-Disposition: form-data; name=\"" + key + "\"\r\n\r\n" + obj[key] + "\r\n");
    			
    		}
    		
    		// Если текущее свойство объекта файл:
    		
    		else if (typeof obj[key] == 'object') {
    			
    			if (typeof obj[key]['name'] !== 'undefined' && typeof obj[key]['type'] !== 'undefined') {
    				
    				// Добавляем метаданные от файла и разделитель, как обычную строку:
    				arr.push("--" + boundary + "\r\nContent-Disposition: form-data; name=\"" + key.replace(/\[[0-9]*\]$/, '[]') + "\"; filename=\"" + obj[key]['name'] + "\"\r\nContent-Type: " + obj[key]['type'] + "\r\n\r\n");
    				
    				arr.push(obj[key]); // Сам файл добавляем целиком, как есть
    				
    				arr.push("\r\n"); // И не забываем про перенос строкки с конца
    				
    			}
    			
    		}
    		
    	}
    
    	arr.push("--" + boundary + "--\r\n"); // Добавляем последний разделитель в массив
    	var body = new Blob(arr); // Формируем тело запроса (бинарник) для отправки из собранного ранее массива
    	
    	// Отправляем бинарник и смотрим результат:
    	
    	var response = await (await fetch('https://nadim.work/test.php', {
    		'method': 'POST',
    		'headers': {
    			'Content-Type': 'multipart/form-data; boundary=' + boundary
    		},
    		'body': body
    	})).text();
    	
    	console.log(response);
    	
    	return response;
    
    }
    Ответ написан
  • Как сейчас windows 10 уживается с Linux на одном диске?

    @zkrvndm
    Софт для автоматизации
    А ты знал, что GRUB умеет загружать образы VirtualBox? Создаем рядом с Linux раздел NTFS, закидываем туда .vdmk образ VirtualBox с установленной Windows и настраиваем загрузку через GRUB.

    В результате, ты сможешь открывать Windows как изнутри Linux используя VirtualBox, так и загружается напрямую через GRUB если вдруг нужна высокая производительность (для игр, например).

    Вариант с Windows внутри Linux:
    https://habr.com/ru/post/228641/

    Вариант с Linux внутри Windiws:
    https://habr.com/ru/post/547512/
    Ответ написан
  • Как найти работу джуну без опыта?

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

    P. S. По крайней мере у меня было так, новых клиентов давно уже не ищу и так работы валом, хотя программист из меня так себе конечно, но факт - даже у такого недопрограмиста как я работы больше, чем он может переварить.
    Ответ написан
  • Как передать еще одно значение и получить в ajax?

    @zkrvndm
    Софт для автоматизации
    Я правильно понимаю, что вы хотите AJAX-ом отправить некую форму со страницы, но добавив к отправляемым данным какие-то дополнительные данные?
    Ответ написан
    Комментировать
  • Как обновлять дату каждые n-дней, статический сайт?

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

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