• Jquery 3: почему не работает код с Promise?

    @zkrvndm
    Софт для автоматизации
    У библиотеки jQuery имеется свой аналог промисов - это так называемые объекты Deffered. Данные объекты полностью обратно совместимы с промисами, вплоть до возможности использовать await с ними.

    Функции $.ajax $.get и $.post возвращают как раз этот самый объект Deferred (совместимый с промисами).

    $.post('/en/save-lists', {}).then(function(res) {
    	console.log('Успех', res);
    }, function(err) {
    	console.error('Ошибка', err);
    });
    Ответ написан
    Комментировать
  • Как написать асинхронный запрос к local storage?

    @zkrvndm
    Софт для автоматизации
    Существует альтернатива для localStorage, речь о IndexedDB. Для него в свою очередь существует удобная обертка - localForage, где все вызовы как раз асинхронные, на промисах.

    Присмотритесь к нему, очень рекомендую:
    https://habr.com/ru/company/nordavind/blog/212709/
    https://html5.by/blog/localforage/
    Ответ написан
    Комментировать
  • Изменить текст внутри iframeв в форме сбора средств (пожертвований/донатов) Юmoney?

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

    @zkrvndm
    Софт для автоматизации
    Напишите браузерное расширение.

    Открытие вкладок нужных сайтов реализуете через фоновый процесс расширения, а авто клики, авто ввод и авто вход через контент скрипт расширения.

    https://thecode-media.turbopages.org/turbo/thecode...

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

    @zkrvndm
    Софт для автоматизации
    Через фоновый процесс расширения или воркер расширения можно смотреть все исходящие запросы:
    https://developer.chrome.com/docs/extensions/refer...
    Там и отслеживайте.

    P. S. А вообще для контроля трафика есть инструменты вроде AdGuard DNS, там можно как смотреть статистику, так и запреты вешать. Это если мы говорим о родительском контроле.
    Ответ написан
    Комментировать
  • Как на JS (Chrome расширение) перенаправлять трафик через прокси?

    @zkrvndm
    Софт для автоматизации
    Через фоновый процесс расширения ставите прокси с использованием PAC-скрипта:
    https://developer.chrome.com/docs/extensions/refer...
    В PAC-скрипте уже прописываете на каких домен прокси должен применятся, а на каких нет.
    Ответ написан
    3 комментария
  • Бесконечные мусорные запросы в консоли хрома. Как пофиксить?

    @zkrvndm
    Софт для автоматизации
    Это трекеры (следилки) пытаются отослать логи, вероятно вы используйте блокировщик рекламы, поэтому и все красное.
    Ответ написан
    Комментировать
  • Как достать содержимое iframe если прописан поддомен?

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

    Выполнить код ниже:
    document.domain = 'site.com';
    И на домене и на суб домене, перед тем как пытаться получить доступ.

    https://learn.javascript.ru/cross-window-communica...
    Ответ написан
  • Base64 формат картинки, что делать на фронтенде?

    @zkrvndm
    Софт для автоматизации
    Обрабатывать такую картинку не обязательно, но если есть такое желание, можно его конвертировать в Blob и получить на него ссылку и уже эту ссылку вставить в атрибут src у картинки:
    (async function() {
        
        var base64 = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ1OXB4IiBoZWlnaHQ9IjQ1OXB4IiB2aWV3Qm94PSIwIDAgNDU5IDQ1OSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDU5IDQ1OTsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGcgaWQ9InNoYXJlIj4NCgkJPHBhdGggZD0iTTQ1OSwyMTYuNzVMMjgwLjUsMzguMjV2MTAyYy0xNzguNSwyNS41LTI1NSwxNTMtMjgwLjUsMjgwLjVDNjMuNzUsMzMxLjUsMTUzLDI5MC43LDI4MC41LDI5MC43djEwNC41NUw0NTksMjE2Ljc1eiIvPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K';
        var blob = await (await fetch(base64)).blob();
        var url = URL.createObjectURL(blob);
        
        document.querySelector('img').src = url; // Заменить селектор на свой
        
    })();

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

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

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

    https://freelance.habr.com/
    Ответ написан
    Комментировать
  • Как отследить появление элемента на странице?

    @zkrvndm
    Софт для автоматизации
    Пример ожидания элемента с использованием MutationObserver:
    // Обработчик для запуска кода сразу по готовности документа:
    
    document.addEventListener('DOMContentLoaded', async function() {
    	
    	console.log('Ищем элемент .test, точнее ждем его появления...');
    	
    	var els = await waitElements('.test');
    	
    	console.log('Найдено элементов: ' + els.length + ' шт. Удаляем...');
    	
    	els.forEach(function(el) {
    		
    		el.remove();
    		
    	});
    	
    });
    
    // Ожидание элемента:
    
    function waitElements(selector) {
    	
    	return new Promise(function(returnResult) {
    		
    		var search_result = false;
    		
    		var local_reactive_function = function() {
    			
    			var wait_elements = document.querySelectorAll(selector);
    			
    			if (wait_elements.length > 0) {
    				
    				if (search_result === false) {
    					
    					search_result = true;
    					observer.disconnect(); 
    					
    					returnResult(wait_elements);
    					
    				}
    				
    			}
    			
    		}
    		
    		var observer = new MutationObserver(local_reactive_function);
    		
    		observer.observe(document.body, {
    			characterData: true,
    			attributes: true,
    			childList: true,
    			subtree: true
    		});
    		
    		local_reactive_function();
    		
    	});
    	
    }

    Надеюсь понятно расписано.
    Ответ написан
    Комментировать
  • Как можно реализовать автозаполнение документа через API и отправку его на подпись клиенту?

    @zkrvndm
    Софт для автоматизации
    Файл docx это обычный zip архив.

    Если подготовите шаблон не должно составить проблем его потом редактировать программно: распаковал архив -> отредактировал XML -> запаковал обратно.

    Я сам как-то давно вордовские макросы так редактировал. Схема вполне работала.
    Ответ написан
    Комментировать
  • Как осуществить jQuery.post() на чистом JavaScript?

    @zkrvndm
    Софт для автоматизации
    Попробуй вот так:
    <span id="<?php echo $todo['id']?>" onclick="removeToDo(this)" class="remove-to-do">x</span>
    
    <script>
    	
    	function removeToDo(e) {
    	
    		var response = await (await fetch('app/remove.php', {
    		  method: 'POST',
    		  headers: { 'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8' },
    		  body: new URLSearchParams({ id: e.getAttribute('id') }).toString()
    		})).text();
    		
    		console.log('Ответ сервера', response);
    		
    	}
    	
    </script>
    Ответ написан
    Комментировать
  • Почему не срабатывает функция remove?

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

    Например:
    document.body.addEventListener('click', function(e) {
        console.log('Произведён клик по элементу', e.target);
    });

    Соответствует ли элемент в e.target нужным вам условиям можно проверять через метод matches.
    Ответ написан
  • Как получить такой же объект, который нам отдаётся из input file?

    @zkrvndm
    Софт для автоматизации
    Пример:
    (async function() {
        
        var blob = await (await fetch('https://dr.habracdn.net/qna/637b1a73/images/favicons/apple-touch-icon-180x180.png')).blob();
        
        var file = new File([ blob ], 'Favicon.png', { type: blob.type });
        
        console.log(file);
        
    })();

    Открой консоль на этом сайте Ctrl + Shift + J и вставь и запусти код выше.

    Только чтобы был правильный lastModified, надо отдельно вытаскивать его из заголовков ответа.
    Ответ написан
    Комментировать
  • Как правильно передать запрос к сервису по API?

    @zkrvndm
    Софт для автоматизации
    Делай так:
    (async () => {
    	
    	const response = await (await fetch('https://report.alta.ru/api/v1/docs/apikey/hash', {
    		method: 'POST',
    		headers: {
    			'Accept': 'application/json',
    			'Content-Type': 'application/json'
    		},
    		body: JSON.stringify({ 'query': Context.data._tc })
    	})).json();
    	
    	console.log('Получен следующий ответ:', response);
    	
    })();

    И делай с response что хочешь - это объект, уже распарсенный JSON.
    Ответ написан
    Комментировать
  • Как всегда отдавать HTTP 200 OK?

    @zkrvndm
    Софт для автоматизации
    Заголовок 200 на php отдаешь через:
    https://www.php.net/manual/ru/function.http-respon...

    А вот чтобы ошибки в скрипте не перезаписывали его, попробуй их (ошибки) ловить через:
    https://code.tutsplus.com/ru/tutorials/php-excepti...
    Ответ написан
    Комментировать
  • Как PHP получить получить JSON из JAVASCRIPT?

    @zkrvndm
    Софт для автоматизации
    Вообще все неправильно делаешь.

    Отправляешь данные из браузера на сервер вот так:
    (async function() {
        var result = await $.post('api/index.php', { raz: 'Привет, мир!' } );
        console.log('Ответ сервера:', result);
    })();

    Открой консоль CTRL + Shift + J, чтобы посмотреть ответ выведенный через console.log

    На сервере все что ты отправил будет лежать внутри суперглобального массива $_POST

    Можешь записать его в файл и посмотреть, что было внутри:
    <?php
    
    header('Content-Type: text/plain; charset=UTF-8');
    
    $json = json_encode($_POST, JSON_UNESCAPED_UNICODE);
    
    file_put_contents('POST.json', $json);
    
    echo 'Данные получены и записаны в файл POST.json -> смотри его.';
    Ответ написан
    Комментировать
  • Как вызвать следующий interval после смены флага?

    @zkrvndm
    Софт для автоматизации
    Асинхронность вам поможет. Пример выполнения чего-либо каждые 1000 мс. пока истинно условие:
    let uslovie = true;
    
    (async () => {
        
        while (uslovie) {
            
            console.log('Тыц');
            
            await new Promise(s => setTimeout(s, 1000));
            
        }
        
    })();
    Ответ написан
    Комментировать
  • Пытаюсь парсить товары с магазина ДНС, но почему получаю всё время array(0) PHP?

    @zkrvndm
    Софт для автоматизации
    Во первых, список товаров сервер ДНС отдает отдельным JSON-ом. Сами по себе эти данные отсутствуют в теле страницы, чтобы понять откуда они берутся надо смотреть вкладку Network браузера и изучать POST / GET запросы, чтобы найти среди них нужный, после чего уже можно повторить такой запрос на PHP.

    Во вторых... вы как запрос делаете? Кто же так делает! Надо сначала куки получить, только затем спрашивать сервер, при этом обязательно с передачей тех же заголовков, что обычный браузер передает! И использовать прокси!!!
    Ответ написан
    Комментировать