Ответы пользователя по тегу JavaScript
  • Как изменить новую вкладку opera?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Всякий раз когда вы открываете новую вкладку возникает событие onCreated.
    Это событие можно отловить из фонового скрипта background.js
    https://developer.chrome.com/docs/extensions/refer...
    Соответственно, вам ничто не мешает после того, как вы поймали это событие просто сменить URL той вкладки, где произошло событие, на нужный вам адрес.

    Есть вариант еще проще: вам ничто не мешает в настройках самой оперы прописать как стартовую страницу нужный вам адрес и никаких расширений не понадобится.
    Ответ написан
    Комментировать
  • Как сделать многостраничный сайт в одном HTML файле используя Javascript?

    zkrvndm
    @zkrvndm
    Архитектор решений
    По факту ты делаешь веб-приложение, одностраничное.

    Рекомендую использовать jQuery UI, чтобы не изобретать велосипеды:
    https://antonshevchuk.gitbooks.io/jquery-for-begin...
    Ответ написан
    Комментировать
  • Как реализовать смену src плавно через JavaScript?

    zkrvndm
    @zkrvndm
    Архитектор решений
    (async function() {
    	
    	// Массив с именами картинок:
    	var names = [ 'image_1.png', 'image_2.png', 'image_3.png'];
    	
    	// Ищем все картинки имеющие атрибут id начинающийся
    	// со слова site_ и сохраняем результат в переменную images:
    	var images = document.querySelectorAll('img[id^="site_"]');
    	
    	// Запускаем бесконечный цикл:
    	
    	while (true) {
    		
    		// Перебираем найденные картинки:
    		
    		images.forEach(function(image) {
    			
    			// Каждой картинке
    			// назначаем прозрачность:
    			image.style.opacity = 0;
    			
    			// И также присваиваем случайную картинку из массива с именами:
    			image.src = 'img/works/works1/' + names[Math.round(Math.random() * links.length - 0.5)];
    			
    		});
    		
    		// Добавляем анимацию
    		// для этого использует цикл
    		// с прерыванием по условию:
    		
    		do {
    			
    			// Увеличиваем opacity на 0.05
    			// всем картинкам в переменной:
    			
    			images.forEach(function(image) {
    				image.style.opacity = Number(image.style.opacity) + 0.05;
    			});
    			
    			// Ждем 50 мс:
    			await new Promise(function(s) { setTimeout(s, 50); });
    			
    			// И далее повторяем пока opacity не станет равной единице...
    			
    		} while (images[0].style.opacity < 1);
    		
    		// После завершения анимации ждем 2 секунды:
    		await new Promise(function(s) { setTimeout(s, 2000); });
    		
    		// После чего бесконечный цикл повторится вновь и вновь...
    		
    	}
    	
    })();
    Ответ написан
    3 комментария
  • Когда нажимаю на ссылку, аккордеон закрывается полностью. Как настроить JQuery код так чтобы можно было переходить по ссылкам в аккордеоне?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Ну так убедись сначала, что клик идет не по ссылке и только тогда применяй изменения:
    $(document).ready(function(){
    	$('.accordion-list > li > .answer').hide();
    	$('.accordion-list > li').click(function() {
    		if (event.target.tagName != 'A') {
    			if ($(this).hasClass('active')) {
    				$(this).removeClass('active').find('.answer').slideUp();
    			} else {
    				$('.accordion-list > li.active .answer').slideUp();
    				$('.accordion-list > li.active').removeClass('active');
    				$(this).addClass('active').find('.answer').slideDown();
    			}
    			return false;
    		}
    	});
    });
    Ответ написан
  • Как найти узел в DOM?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Попробуйте так:
    Array.from(document.querySelectorAll('td')).find(function(td) {
        if (td.innerText == 'Шотландская вислоухая') {
            return td.parentElement.querySelector('td:last-child').innerText;
        }
    });
    Ответ написан
    Комментировать
  • Как сделать, чтобы музыка не сбрасывалась при перезагрузке/переходе страниц?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Я бы сам сделал как, просто повесил на все ссылки на сайте обработчики и при клике по ним отменял бы переход и открывал выбранную страницу внутри iframe со 100% шириной и высотой, без видимых границ. Будет некий аналог ajax-загрузки контента. Разумеется, надо учесть, чтобы радио внутри iframe не запускалось и обработчики внутри ifarme тоже не ставились, тогда все будет ок.
    Ответ написан
    2 комментария
  • Почему появляется ошибка из-за CORS запроса?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Поразбиравшись, я добавил на сайт файл .htaccess и в нем Header set Access-Control-Allow-Origin "*", но все равно ошибка не пропадает, не могу понять почему.

    Потому что у вас данный заголовок НЕ проставился. Ваш файл .htaccess не сработал, посмотрите заголовки ответа:
    622834397e4b7096207073.png
    Я там не вижу заголовка Access-Control-Allow-Origin, в этом проблема.
    Ответ написан
    9 комментариев
  • Как воспроизвести локальный файл?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Rerurk, anderson_en,

    JavaScript имеет доступ к файлам на диске, просто надо запрос делать:
    var input = document.createElement('input');
    input.setAttribute('type', 'file');
    
    input.addEventListener('change', function() {
    	var link = URL.createObjectURL(input.files[0]);
    	var audio = new Audio(link);
    	audio.play();
    });
    
    input.click();
    Ответ написан
  • Как указать кодировку при fetch в JavaScript?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Скачайте страницу как файл, а затем этот файл прочитайте как текст через FileReader, там можно указать кодировку:
    fetch('https://www.kartoteka.ru/').then(function(promise) {
    	return promise.blob();
    }).then(function(file) {
    	var reader = new FileReader();
    	reader.readAsText(file, 'windows-1251');
    	reader.onload = function() {
    		var doc = new DOMParser().parseFromString(reader.result, 'text/html');
    		var b = doc.querySelectorAll(".news_item .image_block_no_image p")[0].innerHTML;
    		console.log(b);
    	};
    });
    Ответ написан
    Комментировать
  • Как получить готовый запрос fetch?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Jeff_Parker, вот правильный вариант:
    (async function() {
    	
    	var response = { state: "" };
    	
    	do {
    		
    		try {
    			
    			var response = await (await fetch(`https://website/dashboard/entries?_=${currentTime}`, {
    				"method": "POST",
    				"headers": {
    					"accept": "*/*",
    					"accept-language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
    					"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
    					"sec-ch-ua": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"98\", \"Google Chrome\";v=\"98\"",
    					"sec-ch-ua-mobile": "?0",
    					"sec-ch-ua-platform": "\"Windows\"",
    					"sec-fetch-dest": "empty",
    					"sec-fetch-mode": "cors",
    					"sec-fetch-site": "same-origin",
    					"sellerboard-account-id": ID[1],
    					"sellerboard-user-id": "user-id",
    					"x-requested-with": "XMLHttpRequest",
    					"cookie": `PHPSESSID=${cookiesPHP}; ${cookiesNoPHP}`,
    					"Referer": "https://website/dashboard/",
    					"Referrer-Policy": "strict-origin-when-cross-origin"               
    				},
    				"body": `dashboardSessionId=${SESSIONID_param}&viewType=panels&entryType=product&periodStart=${periodStart}&periodEnd=${periodStart}&periodicity=period&sortField=units&sortDirection=desc&page=1&groupByAsin=&groupBy=&rangeStart=${rangeStart}&rangeEnd=${rangeEnd}&rangePeriodicity=month&trendsParameter=sales`
    			})).json();
    			
    			if (response.state != "ready") {
    				
    				console.log("Данные еще в процессе подготовки, повтор запроса через 1 сек.");
    				
    				await new Promise(function(s) { setTimeout(s, 1000); });
    				
    			}
    			
    		}
    		
    		catch (err) {
    			
    			console.error(err);
    			console.log("Ошибка выполнения запроса, повтор попытки через 1 сек.");
    			
    			await new Promise(function(s) { setTimeout(s, 1000); });
    			
    		}
    
    	} while (response.state != "ready");
    
    	console.log("Данные готовы, вывод ниже:");
    	console.dir(response);
    	
    })();
    Ответ написан
  • Как установить одинаковую высоту для строк через JS или jQuery?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Вы изначально неправильно подошли к проблеме. Используйте таблицу!
    Ответ написан
  • Как записать ответ post запроса в переменную?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Для записи результата запроса в переменную используйте await:
    const createProduct = await api.post('products', newProduct);
    console.log(createProduct);
    Ответ написан
    Комментировать
  • Получить содержимое страницы другого сайта на JS?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Конечно же можно, вам достаточно лишь запрашивать чужую страницу не напрямую, а через свой сайт.

    Ваш сайт на PHP?
    Ответ написан
    Комментировать
  • Как сделать открытие страницы в фоновом режиме?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Размести на нужной странице такой код:
    <script>
    jQuery(function() {
        jQuery(document).one('click', function() {
            window.open('https://yandex.ru');
        });
    });
    </script>

    Первый клик в любое место будет открывать Яндекс, а остальные клики уже ничего не будут делать.
    Ответ написан
    4 комментария
  • Как в input file добавит значение из внешнего источника?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Если картинка лежит внутри вашего сайта, то вы можете вставить его в поле input следующим образом:
    async function pasteFile(file_link, input_selector) {
    	
    	var blob = { type: 'html' };
    	
    	do {
    		
    		try {
    			
    			blob = await (await fetch(file_link)).blob();
    			
    			if (blob.type.includes('html')) {
    				
    				console.log('Не удалось скачать файл с сервера, вместо файла получена html-страница', blob);
    				await new Promise(function(s) { setTimeout(s, 1000); });
    				
    			}
    			
    		}
    		
    		catch (err) {
    			
    			console.log('Не удалось скачать файл с сервера', err);
    			await new Promise(function(s) { setTimeout(s, 1000); });
    			
    		}
    		
    	} while (blob.type.includes('html'));
    	
    	var dt  = new DataTransfer();
    	dt.items.add(new File([blob], file_link.split('/').pop(), { type: blob.type }));
    	document.querySelector(input_selector).files = dt.files;
    	
    	console.log('Файл успешно вставлен в поле', dt.files);
    	
    }

    Вам необходимо вызвать функцию pasteFile(file_link, input_selector) передав первым параметром ссылку на картинку, а вторым параметром CSS-селектор указывающий на поле input в которое требуется воткнуть картинку.

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

    zkrvndm
    @zkrvndm
    Архитектор решений
    Чтобы это сделать, надо переписать отправку формы на JavaScript.
    Пример кода, чтобы форма отправлялась при помощи fetch без перезагрузки страницы:
    <script>
    	
    	document.addEventListener('DOMContentLoaded', function() {
    		
    		document.querySelector('form.create-form').addEventListener('submit', async function() {
    			
    			var form = this;
    			
    			event.preventDefault();
    			
    			var audio = await (await fetch(form.querySelector('audio').src)).blob();
    			
    			var form_data = new FormData(form);
    			form_data.append('file', audio, 'FileName.mp3');
    			
    			var response = await (await fetch(form.action, {
    				method: 'POST',
    				body: form_data
    			})).text();
    			
    			console.log('Ответ сервера:', response);
    			
    			form.outerHTML = 'Ответ сервера:<br>' + response;
    			
    		});
    		
    	});
    	
    </script>
    Ответ написан
  • Как передать файл и переменную через Ajax?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Добавьте вашу переменную к FormData:
    form_data.append('key', 'value');
    Перед отправкой.
    Ответ написан
    1 комментарий
  • Как получить тело запроса в событии onload?

    zkrvndm
    @zkrvndm
    Архитектор решений
    var original = {
    	open: XMLHttpRequest.prototype.open,
    	send: XMLHttpRequest.prototype.send
    };
    
    XMLHttpRequest.prototype.open = function (method, url, async, user, password) {
    	console.log('Параметры запроса:', [method, url, async, user, password]);
    	return original.open.call(this, method, url, async, user, password);
    };
    
    XMLHttpRequest.prototype.send = function (data) {
    	console.log('Тело запроса:', data);
    	return original.send.call(this, data);
    };
    Ответ написан
    2 комментария
  • Как переключить контекст javaScript?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Нажимаешь кнопку top, выбираешь нужный контекст и в принципе на этом готово, команды консоли будут уходить в выбранный контекст.
    Ответ написан
  • Почему при ajax подгрузке посты получаются в виде Html?

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