Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 09.01.2024, 10:00
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

Сообщение от Stas1985
Это библиотека движка Virtuemart, если выпилить подключение mootools то при обновлениях движка он опять пропишется. Сам файл _update.lik-astana.kz/media/system/js/mootools-core.js при этом не обновляется
Тогда хз, что делать. Один из скриптов google-translate вызывает этот самый Array.from, передавая ему Map как параметр. Ну и в результате получает всякую чушь.
Попробовать взять новую версию и вручную ее запихнуть.

Последний раз редактировалось voraa, 09.01.2024 в 10:04.
Ответить с цитированием
  #22 (permalink)  
Старый 09.01.2024, 11:02
Профессор
Отправить личное сообщение для Stas1985 Посмотреть профиль Найти все сообщения от Stas1985
 
Регистрация: 05.03.2012
Сообщений: 159

файл mootools-core.js был в одну строку, начал переносить строки и сайт начал автоматически переводить сайт на Казахский. Начали появятся ошибки в консоли. Сейчас перенесу все строки посмотрим что покажет.
Цитата:
Попробовать взять новую версию и вручную ее запихнуть.
Если не поможет то буду пробовать
Ответить с цитированием
  #23 (permalink)  
Старый 09.01.2024, 11:19
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

Сообщение от Stas1985
файл mootools-core.js был в одну строку
Да, он минифицированный.
Сообщение от Stas1985
сайт начал автоматически переводить сайт на Казахский.
Возможно там остались старые куки. Надо почистить.
Ответить с цитированием
  #24 (permalink)  
Старый 09.01.2024, 11:29
Профессор
Отправить личное сообщение для Stas1985 Посмотреть профиль Найти все сообщения от Stas1985
 
Регистрация: 05.03.2012
Сообщений: 159

Чистил и в браузере и кэш на сайте
Ответить с цитированием
  #25 (permalink)  
Старый 09.01.2024, 12:50
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

Тут вот на что я обратил внимание. Если посмотреть на сайт, который работает (_https://studio-it.kz/), то там устанавливается два кука

googtrans /ru/kk для studio-it.kz
googtrans /ru/kk для .studio-it.kz

А для _https://update.lik-astana.kz/ три

googtrans /ru/kk для .update.lik-astana.kz
googtrans /ru/en для update.lik-astana.kz
googtrans /ru/en для .lik-astana.kz

Причем с разными значениями
Тут уже надо разбираться и экспериментировать.

Файл google-translate.js
строки 23-25
/* Если скрипт не работает или работает неправильно, раскомментируйте и укажите основной домен в свойстве domain */
	/* If the script does not work or does not work correctly, uncomment and specify the main domain in the domain property */
	// domain: "Get-Web.Site"

Я, честно говоря, не очень понимаю, что там должно стоять.
Можно попробовать раскомментировать и поставить туда
domain: "lik-astana.kz"

Еще в этом файле меня очень смущает строка 103
if (domain == "undefined") return;

Я не могу ее объяснить.
Либо попробовать ее исправить на
if (typeof domain == "undefined") return;

(при этом закомментировать строку 25)

Или попытаться в строку 25 написать
domain: "undefined"
Ответить с цитированием
  #26 (permalink)  
Старый 09.01.2024, 13:26
Профессор
Отправить личное сообщение для Stas1985 Посмотреть профиль Найти все сообщения от Stas1985
 
Регистрация: 05.03.2012
Сообщений: 159

Может можно как-то после отработки скрипта чистить куки googtrans
Ответить с цитированием
  #27 (permalink)  
Старый 09.01.2024, 17:09
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

Сообщение от Stas1985
Может можно как-то после отработки скрипта чистить куки googtrans
Можно, конечно.
В файле google-translate.js строки 15-17, раскомментариваем и ставим какое-нибудь слово, например
/* Если хотите подписаться на событие "FinishTranslate" (Момент когда скрипт закончил перевод), расскоментируйте и добавьте любое проверочное слово на оригинальном языке */
	/* If you want to subscribe to the "FinishTranslate" event (The moment when the script finished translating), uncomment and add any test word in the original language */
	 testWord: "Кошка",

Затем ставим обработчик события "FinishTranslate"
<script>
document.addEventListener("FinishTranslate", () => {
   // Тут удаляем куки
	Cookies.remove("googtrans");
})
</script>

Только наверно надо удалять все куки с путями, как их устанавливали в google-translate.js (строки 94-114).
Пробовать надо. Я мог попробовать только на простейшем примере.
Ответить с цитированием
  #28 (permalink)  
Старый 09.01.2024, 18:54
Профессор
Отправить личное сообщение для Stas1985 Посмотреть профиль Найти все сообщения от Stas1985
 
Регистрация: 05.03.2012
Сообщений: 159

так не срабатывает
Ответить с цитированием
  #29 (permalink)  
Старый 09.01.2024, 19:52
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

Сообщение от Stas1985
так не срабатывает
Что именно не срабатывает?
document.addEventListener("FinishTranslate", () => {
   // Тут удаляем куки
    Cookies.remove("googtrans");
})

Это срабатывает?

Слово в
testWord: "Кошка",
лучше ставить русское, что бы она его переводила. Хотя событие вроде и так посылает. Правда где оно у вас ловится, я не нашел.

Последний раз редактировалось voraa, 09.01.2024 в 19:54.
Ответить с цитированием
  #30 (permalink)  
Старый 10.01.2024, 06:34
Профессор
Отправить личное сообщение для Stas1985 Посмотреть профиль Найти все сообщения от Stas1985
 
Регистрация: 05.03.2012
Сообщений: 159

Вот так не срабатывает
const googleTranslateConfig = {
	/* Original language */
	lang: "ru",

	/* Если хотите подписаться на событие "FinishTranslate" (Момент когда скрипт закончил перевод), расскоментируйте и добавьте любое проверочное слово на оригинальном языке */
	 testWord: "куки",

	/* Язык, на который переводим при первом посещении */
	// langFirstVisit: 'en',

	/* Если скрипт не работает или работает неправильно, раскомментируйте и укажите основной домен в свойстве domain */
   // domain: "lik-astana.kz"
	domain: "undefined"

};

document.addEventListener("DOMContentLoaded", (event) => {
	
	/* Подключаем виджет google translate */
	let script = document.createElement("script");
	script.src = `//translate.google.com/translate_a/element.js?cb=TranslateWidgetIsLoaded`;
	document.getElementsByTagName("head")[0].appendChild(script);
});


function TranslateWidgetIsLoaded() {
	TranslateInit(googleTranslateConfig);
}

function TranslateInit(config) {
	if (config.langFirstVisit && !Cookies.get("googtrans")) {
		/* Если установлен язык перевода для первого посещения и куки не назначены */
		TranslateCookieHandler("/auto/" + config.langFirstVisit);
	}

	let code = TranslateGetCode(config);

	TranslateHtmlHandler(code);

	if (code == config.lang) {
		/* Если язык по умолчанию, совпадает с языком на который переводим, то очищаем куки */
		TranslateCookieHandler(null, config.domain);
	}

	if (config.testWord) TranslateMutationObserver(config.testWord, code == config.lang);


	/* Инициализируем виджет с языком по умолчанию */
	new google.translate.TranslateElement({
		pageLanguage: config.lang,
		multilanguagePage: true, // Your page contains content in more than one languages
	});

	/* Вешаем событие  клик на флаги */
	TranslateEventHandler("click", "[data-google-lang]", function (e) {
		TranslateCookieHandler(
			"/" + config.lang + "/" + e.getAttribute("data-google-lang"),
			config.domain
		);
		/* Перезагружаем страницу */
		window.location.reload();
	});
}

function TranslateGetCode(config) {
	/* Если куки нет, то передаем дефолтный язык */
	let lang =
		Cookies.get("googtrans") != undefined && Cookies.get("googtrans") != "null"
			? Cookies.get("googtrans")
			: config.lang;
	return lang.match(/(?!^\/)[^\/]*$/gm)[0];
}

function TranslateCookieHandler(val, domain) {
	/* Записываем куки /язык_который_переводим/язык_на_который_переводим */
	Cookies.set("googtrans", val, {
		domain: document.domain,
		path: '/'
	});
	Cookies.set("googtrans", val, {
		domain: "." + document.domain,
		path: '/'
	});

	if (domain == "undefined") return;
	/* записываем куки для домена, если он назначен в конфиге */
	Cookies.set("googtrans", val, {
		domain: domain,
		path: '/'
	});

	Cookies.set("googtrans", val, {
		domain: "." + domain,
		path: '/'
	});
}

function TranslateEventHandler(event, selector, handler) {
	document.addEventListener(event, function (e) {
		let el = e.target.closest(selector);
		if (el) handler(el);
	});
}

function TranslateHtmlHandler(code) {
	/* Получаем язык на который переводим и производим необходимые манипуляции с DOM */
	if (document.querySelector('[data-google-lang="' + code + '"]') !== null) {
		document
			.querySelector('[data-google-lang="' + code + '"]')
			.classList.add("language__img_active");
	}
}

function TranslateMutationObserver(word, isOrigin) {

	if (isOrigin) {
		document.dispatchEvent(new CustomEvent("FinishTranslate"));
	} else {

		/* Создаем скрытый блок в который добавляем тестовое слово на оригинальном языке. Это позволит нам отследить момент когда сайт будет переведен и вызвать событие "FinishTranslate"  */

		let div = document.createElement('div');
		div.id = 'googleTranslateTestWord';
		div.innerHTML = word;
		div.style.display = 'none';
		document.body.prepend(div);

		let observer = new MutationObserver(() => {
			document.dispatchEvent(new CustomEvent("FinishTranslate"));
			observer.disconnect();
		});

		observer.observe(div, {
			childList: false,
			subtree: true,
			characterDataOldValue: true
		});
	}
}

	document.addEventListener("FinishTranslate", () => {
	   // Тут удаляем куки
	    Cookies.remove("googtrans");
	})
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Спарсить несколько страниц (Google Chrome Extension) libertyswift Javascript под браузер 6 20.01.2017 10:43
Phonegap Сверстать 5-7 страниц yan3000 Мобильный JavaScript 1 17.08.2016 22:05
предварительная загрузка страниц в Chrome Kealman Opera, Safari и др. 0 24.07.2013 16:33
Поиск страниц по ключевым словам stormageddon Events/DOM/Window 5 22.06.2013 21:09
Динамическое меню кол-ва страниц. wayzer Элементы интерфейса 0 26.12.2012 20:29