Ответы пользователя по тегу JavaScript
  • Как найти и выбрать элемент внутри кода страницы через JavaScript?

    @zkrvndm
    Софт для автоматизации
    В манифесте расширения в параметрах контент-скрипта укажите "all_frames": true (пример ниже)
    {
    	
    	"name" : "Имя расширения",
    	
    	"manifest_version" : 2,
    	 
    	// ...
    	
    	"content_scripts" : [
    	
    		{	
    			"matches" : [ "https://*.mysite.ru/*" ],
    			"run_at": "document_start",
    			"js" : [ "content.js" ],
    			"all_frames": true
    		}
    		
    	]
    
    }

    Это даст понять браузеру, что контент-скрипт надо запускать в том числе внутри фреймов. Далее, уже в самом контент-скрипте выполняете проверку во фрейме ли вы находитесь и предпринимаете необходимые действия:
    if (window.top != window) {
    	
    	console.log('Это фрейм!');
    	
    }
    
    else {
    	
    	console.log('Это не фрейм!');
    	
    }
    Ответ написан
  • Как удалить последнюю запись из истории браузера?

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

    @zkrvndm
    Софт для автоматизации
    Похоже на учебное задание. На jQuery такую фильтрацию можно сделать так:
    $(arrObjects).filter(function(n, e) { return e.skills.includes('js'); });

    Если нужен на выходе обычный массив, то так:
    $.makeArray($(arrObjects).filter(function(n, e) { return e.skills.includes('js'); }));
    Ответ написан
  • Запрос fetch заменят плюсы из текста на пробел, как это исправить?

    @zkrvndm
    Софт для автоматизации
    Вы неправильно формируете тело запроса. Есть удобный конструктор для этого:
    body: new URLSearchParams({ test: 'LOL+ggggg' }).toString(),

    В конструктор URLSearchParams передаете объект с данными, которые хотите отправить, а дальше он сам преобразует этот объект в корректную строку текста полностью соответствующую формату application/x-www-form-urlencoded

    Кстати, вы могли бы упростить код, если бы использовали async / await:
    async function send(obj) {
    
    	var response = await (await fetch('./src/database/userService/user.php', {
    		body: new URLSearchParams(obj).toString(),
    		cache: 'no-cache',
    		headers: { 'Content-type': 'application/x-www-form-urlencoded; charset=UTF-8' },
    		method: 'POST',
    		mode: 'cors'
    	})).text();
    	
    	console.log('Ответ сервера:', response);
    	
    }
    
    send({ test: 'LOL+ggggg' });
    Ответ написан
    Комментировать
  • Как подключить JQuery в расширение браузера Chrome?

    @zkrvndm
    Софт для автоматизации
    Добавь в манифесте следующее разрешение:
    ...
    "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
    ...

    Это разрешение нужно, чтобы работал eval.

    Далее, если тебе где-то нужен jQuery, допустим в файле background.js, то банально используешь там eval:
    Нажмите, чтобы развернуть код
    jQueryDownload(); // Запускаем загрузку jQuery
    
    // Функция для загрузки jQuery:
    
    async function jQueryDownload() {
    	
    	// Загружаем библиотеку jQuery как текст с оф. сайта и записываем в переменную code:
    	var code = await (await fetch('https://code.jquery.com/jquery-3.6.0.min.js')).text();
    	
    	// Выполняем код:
    	window.eval(code);
    	
    }

    Разумеется надо понимать, что запуск уже своего собственного кода надо инициировать после загрузки jQuery!

    Например, так:
    Нажмите, чтобы развернуть код
    jQueryDownload(); // Запускаем загрузку jQuery
    
    // Функция для загрузки jQuery:
    
    async function jQueryDownload() {
    	
    	// Загружаем библиотеку jQuery как текст с оф. сайта и записываем в переменную code:
    	var code = await (await fetch('https://code.jquery.com/jquery-3.6.0.min.js')).text();
    	
    	// Выполняем код:
    	window.eval(code);
    	
    	// Запуск своего кода:
    	$(startMyJavaScriptCode);
    	
    }
    
    // Функция уже со своим кодом:
    
    function startMyJavaScriptCode() {
    	
    	// ...
    	
    	console.log('Запуск своего кода');
    	
    	// ...
    	
    }
    Ответ написан
    Комментировать
  • Как создать QR код WhatsApp на сайте для авторизации вэб версии?

    @zkrvndm
    Софт для автоматизации
    Варианта тут 2:
    1. Используй официальное API
    2. Пиши бота (браузерное расширение) для веб-версии
    Ответ написан
  • Как вывод в консоль дожидается выполнения async функции?

    @zkrvndm
    Софт для автоматизации
    Асинхроная функция всегда возвращает промис, вы своим console.log выводите отнюдь не результат, а тупо промис от функции. Далее, в консоли вполне можно запускать асинхронный код, попробуйте прямо сейчас вбить в консоли:
    response = await (await fetch('https://jsonplaceholder.typicode.com/users')).json();
    console.log(response);

    Или же применительно к вашему коду делайте так:
    async function func() {
      const response = await fetch('https://jsonplaceholder.typicode.com/users');
      return await response.json();
    }
    console.log(await func());
    Ответ написан
    Комментировать
  • Как изменить span через jquery, без id или класса?

    @zkrvndm
    Софт для автоматизации
    jQuery позволяет искать элементы по содержащемуся внутри тексту.

    В вашем случае попробуйте сделать так:
    $('span:contains("test2")').html('новый текст');
    Ответ написан
    Комментировать
  • Почему получаю ошибку Uncaught (in promise) SyntaxError: expected expression, got

    @zkrvndm
    Софт для автоматизации
    Перепишите код свой, у вас jQuery в вперемешку с обычным кодом идет, обычно так не делают.

    function fastOrder(product_id) {
    	
    	$('body').prepend(`<section class="fastorder-custf">
    		<div class="ajax_result">
    			<i class="fa fa-spinner fa-pulse overlay__icon" aria-hidden="true"></i>
    		</div>
    	</section>`);
    	
    	$('.mfp-close').trigger('click');
    	
    	$.ajax({
    		url: 'index.php?route=order/getForm',
    		type: 'POST',
    		contentType: 'application/json; charset=UTF-8',
    		data: product_id,
    		dataType: 'html',
    		success: function(response) {
    			$('.ajax_result').html('Ответ сервера: ' + response);
    		},
    		error: function(xhr, status) {
    			$('.ajax_result').html('При отправке запроса произошла ошибка, детали см. в консоли');
    			console.log('При отправке запроса произошла ошибка:');
    			console.dir(xhr);
    		}
    	});
    	
    }
    Ответ написан
  • Как получить данные из запроса?

    @zkrvndm
    Софт для автоматизации
    Вставьте в консоли браузера во вкладке Console:
    (async function() {
        response = await (await fetch('https://opentdb.com/api.php?amount=10&category=23&difficulty=easy&type=boolean')).json();
        console.log(response);
    })();

    В переменной response будет лежать ответ сервера. Чтобы получить доступ к каким-то конкретным свойствам используйте квадратные скобки, например response['result'] или response['response_code']

    Для перебора массива, что лежит в свойстве response['result'] можете использовать цикл for
    Ответ написан
    Комментировать
  • Как заменить номера телефонов в iframe на ***?

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

    @zkrvndm
    Софт для автоматизации
    Вот здесь вы передаете некорректный адрес:
    $.get('@Url.Action("InitialFavorite", "Home")')
    Вы передаете строку кода, а надо конкретную ссылку.
    Ответ написан
  • Как снести все скрипты на странице?

    @zkrvndm Автор вопроса
    Софт для автоматизации
    Спасибо Aetae за подсказанное решение, которое работает в Firefox:
    document.wrappedJSObject.write(''); document.close();

    Если запустить метод из контент-скрипта в своем расширении еще до начала отрисовки DOM, то это позволяет предотвратить запуск скриптов сайта, а далее на страницу уже можно спокойно залить свое содержимое.
    Ответ написан
    Комментировать
  • Почему document.write не работает в Firefox?

    @zkrvndm Автор вопроса
    Софт для автоматизации
    Спасибо Aetae за подсказанное решение, которое работает в Firefox:
    document.wrappedJSObject.write(''); document.close();

    Если запустить метод из контент-скрипта в своем расширении еще до начала отрисовки DOM, то это позволяет предотвратить запуск скриптов сайта, а далее на страницу уже можно спокойно залить свое содержимое.
    Ответ написан
    Комментировать
  • Как в промисе дождаться выполнения обычной функции?

    @zkrvndm
    Софт для автоматизации
    async function test() {
        await one();
        tow();
    }
    
    test();
    Ответ написан
    Комментировать
  • Можно ли разрешить просмотр только при Ajax-подгрузке страницы?

    @zkrvndm
    Софт для автоматизации
    Делай так:
    <?php
    
    // Если мы получили GET-запрос:
    
    if ($_SERVER['REQUEST_METHOD'] == 'GET') {
    	
    	header('Location:/', TRUE, 301); // Переадресуем на главную
    	
    }
    
    // Если мы получили POST-запрос:
    
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    	
    	// Выводишь данные, которые нужны
    	
    }

    Когда делаешь аякс-запрос, просто поменяй тип запроса с GET на POST.
    Ответ написан
    Комментировать
  • Как сделать так, чтобы переход по пагинации оставался внутри ajax-страницы?

    @zkrvndm
    Софт для автоматизации
    Грузите данные не в div а в iframe, тогда вся пагинация у вас будет происходит чисто внутри iframe не затрагивая основную страницу.
    $(function () {
        $("#show").one('click', function () {
              $("#container").html('<iframe src="page.html"></iframe>');
        });	
    });

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

    @zkrvndm
    Софт для автоматизации
    Используй this для получения ссылки на элемент.
    Ответ написан
    Комментировать
  • Почему $.get не работает правильно!?

    @zkrvndm
    Софт для автоматизации
    Попробуйте так:
    $.get('/index.html').done(function(html) {
        var doc = new DOMParser().parseFromString(html, 'text/html'); // Парсим документ
        var body = $('body', doc).html(); // Из документа берем содержимое тега body
        $('#news_links_array').html(body); // Вставляем содержимое body куда надо
    });

    Чтобы получить body надо сначала распарсить html-код в документ и уже в этом документе искать нужные теги.
    Ответ написан
    3 комментария
  • Как вернуть страницу без перезагрузки?

    @zkrvndm
    Софт для автоматизации
    Перед тем, как выполнять этот код запиши содержимое страницы в переменную, только потом запускай:
    page = $('html').html(); // Сохраняем страницу в переменную page
    
    $('html').html('<head><title>' + translations['core.no_internet_connection'] + '</title></head><body><div style="font: 12pt/10pt sans-serif; margin-top: 200px; text-align: center;"><p>' + options['siteName'] + '</p>' + translations['core.no_internet_connection'] + '</div></body>');
    
    // Ставим таймер:
    setTimeout(funvtion() {
        $('html').html(page); // Спустя 5 сек. записываем содержимое переменной обратно на страницу
    }, 5000);
    Ответ написан
    Комментировать