self.skipWaiting()
в Service Worker можно отправить сообщение об успешном сбросе кеша обратно в клиентскую часть приложения, используя postMessage()
. В клиентской части вы можете прослушивать это сообщение и выполнить обновление страницы с помощью location.reload()
или другого подходящего метода.// Service Worker
self.addEventListener('message', event => {
if (event.data && event.data.type === 'SKIP_WAITING') {
self.skipWaiting();
event.source.postMessage({ type: 'CACHE_RESET_SUCCESS' });
}
});
// client
navigator.serviceWorker.addEventListener('message', event => {
if (event.data && event.data.type === 'CACHE_RESET_SUCCESS') {
location.reload();
}
});
controllerchange
на объекте navigator.serviceWorker
. Когда Service Worker сбрасывается и становится активным контроллером, будет вызвано событие controllerchange, и вы можете выполнить обновление страницы.navigator.serviceWorker.addEventListener('controllerchange', () => {
location.reload();
});
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
driver.get("https://znanija.com/app/ask?entry=hero&q=magic")
time.sleep(3)
# Переключаемся на всплывающее окно, если оно активно
if len(driver.window_handles) > 1:
driver.switch_to.window(driver.window_handles[1])
driver.close()
# Возвращаемся на основное окно
driver.switch_to.window(driver.window_handles[0])
# Кликаем на кнопку на основной странице
driver.find_element(By.CLASS_NAME, 'sg-button').click()
element
в консоль при querySelectorAll
и понять, что это массив. Тогда для присвоения доп. класса надо пройти по этому массиву и добавить этот самый класс.let elements = document.querySelectorAll('.advantages__item');
window.addEventListener('scroll', check, false);
function check() {
if (window.scrollY > 300) {
elements.forEach(function(element) {
element.classList.add('show');
});
} else {
elements.forEach(function(element) {
element.classList.remove('show');
});
}
}
console.log()
сила! const block = document.getElementById('your-block-id'); // Замените 'your-block-id' на актуальный идентификатор вашего блока
if (block.scrollWidth > block.offsetWidth) {
// Текст обрезается и появляется троеточие
// В этом случае вы можете добавить обработчик события наведения мыши, чтобы показать тултип
block.addEventListener('mouseenter', showTooltip);
block.addEventListener('mouseleave', hideTooltip);
} else {
// Текст полностью умещается в блоке
// В этом случае вы можете удалить обработчики событий или не отображать тултип вообще
block.removeEventListener('mouseenter', showTooltip);
block.removeEventListener('mouseleave', hideTooltip);
}
function showTooltip() {
// Код для показа тултипа
}
function hideTooltip() {
// Код для скрытия тултипа
}
SELECT * FROM (
-- Внутренний подзапрос, применяющий оконную функцию LAG() к таблице calls
SELECT *,
LAG(duration) OVER (PARTITION BY cid_from ORDER BY call_time) AS previous_duration
FROM calls
) AS subquery
-- Основной запрос, фильтрующий результаты
WHERE duration > 20 -- Длительность звонка больше 20 минут
AND previous_duration < 2; -- Предыдущая длительность меньше двух минут
network.proxy.type
, network.proxy.socks
и network.proxy.socks_port
через FirefoxProfile, вы должны настроить эти параметры через proxy_options
в seleniumwire_options:from seleniumwire import webdriver
from selenium.webdriver.common.by import By
seleniumwire_options = {
'proxy': {
'http': 'socks5://127.0.0.1:40000',
'https': 'socks5://127.0.0.1:40000',
'no_proxy': 'localhost,127.0.0.1',
'proxy_type': 'manual'
}
}
options = webdriver.FirefoxOptions()
profile = webdriver.FirefoxProfile()
user_agent = UserAgent().random
profile.set_preference("general.useragent.override", user_agent)
driver = webdriver.Firefox(
options=options,
firefox_profile=profile,
seleniumwire_options=seleniumwire_options
)
driver.get('https://www.whatismyip.com/')
print(driver.find_element(By.CSS_SELECTOR, '.we-did-it__title').text)
http
и https
, а также удаляем порт изno_proxy
. Вы можете изменить эти настройки под свои нужды.whatismyip.com
($('form').submit(...))
или метод window.location.href
для перехода по ссылке.$(function() {
$('a').click(function(event) {
event.preventDefault(); // Отменяет переход по ссылке
var url = $(this).attr('href');
$(".loader_inner").fadeIn();
$(".loader").fadeIn();
setTimeout(function() {
window.location.href = url; // Переход по ссылке после отображения прелоадера
}, 400); // Задержка, чтобы прелоадер успел отобразиться
});
});
$(window).on('load', function() {
$(".loader_inner").fadeOut();
$(".loader").delay(400).fadeOut("slow");
});
// tailwind.config.js
module.exports = {
purge: {
enabled: true,
content: ['path/to/your/html/files/*.html'], // Путь к вашим HTML файлам
},
// Остальные настройки Tailwind CSS
};
npx tailwindcss build path/to/your/css/input.css -o path/to/your/css/output.css
date_default_timezone_set('Europe/Moscow'); // Установка часового пояса на Московское время
$date = mysql2date('D, d M Y H:i:s O', $your_date); // Замените $your_date на вашу переменную с датой
@font-face {
font-family: 'Roboto Condensed';
font-style: normal;
font-weight: 400;
font-display: optional;
src: url(fonts/roboto_condensed/RobotoCondensed-Regular.ttf) format('truetype')
}
// Отслеживание кликов по телефонной ссылке
$('a[href^="tel:"]').click(function() {
var utmParams = getUTMParams(); // Функция для получения utm-меток
sendLeadToBitrix(utmParams); // Функция для отправки данных в Битрикс24
});
// Отслеживание кликов по ссылке WhatsApp
$('a[href^="https://api.whatsapp.com"]').click(function() {
var utmParams = getUTMParams(); // Функция для получения utm-меток
sendLeadToBitrix(utmParams); // Функция для отправки данных в Битрикс24
});
// Функция для получения utm-меток из URL
function getUTMParams() {
var urlParams = new URLSearchParams(window.location.search);
var utmParams = {};
if (urlParams.has('utm_source')) {
utmParams.source = urlParams.get('utm_source');
}
if (urlParams.has('utm_medium')) {
utmParams.medium = urlParams.get('utm_medium');
}
if (urlParams.has('utm_campaign')) {
utmParams.campaign = urlParams.get('utm_campaign');
}
// Дополнительные utm-метки, если нужно
return utmParams;
}
// Функция для отправки данных в Битрикс24
function sendLeadToBitrix(utmParams) {
var apiUrl = 'https://your-bitrix24-url/rest/your-rest-api-endpoint'; // Замените на фактический URL и REST API-эндпоинт
var leadData = {
title: 'New Lead',
source_id: utmParams.source,
medium_id: utmParams.medium,
campaign_id: utmParams.campaign,
// Дополнительные поля лидов, если нужно
};
// Отправка запроса на создание лида в Битрикс24
$.ajax({
url: apiUrl,
method: 'POST',
data: leadData,
success: function(response) {
console.log('Lead created successfully');
},
error: function(error) {
console.error('Error creating lead:', error);
}
});
}
function add_yandex_metric_goal() {
if (is_singular()) {
global $post;
$content = $post->post_content;
// Поиск всех ссылок с префиксом /go/
preg_match_all('/<a href="\/go\/(.*?)"/', $content, $matches);
// Добавление JavaScript-кода для цели Яндекс Метрики к найденным ссылкам
if (!empty($matches[1])) {
$goal_code = "ym(83804250, 'reachGoal', 'goshop'); return true;";
$replacement = '<a href="/go/$1" onclick="' . $goal_code . '"';
$content = preg_replace('/<a href="\/go\/(.*?)"/', $replacement, $content);
// Обновление контента поста
$post->post_content = $content;
wp_update_post($post);
}
}
}
add_action('wp', 'add_yandex_metric_goal');