Вернуться   Форум об интернет-маркетинге > > >
Ответ
 
Опции темы
Старый 10.10.2019, 15:56   #1
Аспирант
 
Аватар для Sevbanchik
 
Регистрация: 06.09.2011
Сообщений: 140
Репутация: 12753

По умолчанию Реклама во всех ins уже отображается

Пытаюсь оптимизировать код загрузки, т.к. 80% его содержимого повторяется. Сейчас они имеют приблизительно такой вид
Код:
<script>
if(window.innerWidth >= 960) {

	/* Right Top */
	if (document.getElementById('YYYYYY')) {
		var g = document.createElement("ins");
			g.className = "adsbygoogle";
			g.style.display = "inline-block";
			g.style.width = "300px";
			g.style.height = "600px";
			g.setAttribute("data-ad-client", "ca-pub-ZZZZZZ");
			g.setAttribute("data-ad-slot", "000000000");
			document.getElementById("YYYYYY").appendChild(g);
		(adsbygoogle = window.adsbygoogle || []).push({});
	}
	
	/* Right Middle */
	if (document.getElementById('XXXXXX')) {
		var g = document.createElement("ins");
			g.className = "adsbygoogle";
			g.style.display = "inline-block";
			g.style.width = "300px";
			g.style.height = "600px";
			g.setAttribute("data-ad-client", "ca-pub-ZZZZZZ");
			g.setAttribute("data-ad-slot", "11111111111");
			document.getElementById("XXXXXX").appendChild(g);
		(adsbygoogle = window.adsbygoogle || []).push({});
	}
}
</script>
Хочу уменьшить код, вроде бы по логике должно работать, как написано ниже, но в консоли барузера пишет, что все ins уже содержат рекламные блоки.

Код:
<script>
var g = document.createElement("ins");
	g.className = "adsbygoogle";
	g.style.display = "inline-block";
	g.style.width = "300px";
	g.style.height = "600px";
	g.setAttribute("data-ad-client", "ca-pub-ZZZZZZ");

if(window.innerWidth >= 960) {

	/* Right Top 300*600 */
	if (document.getElementById('YYYYYY')) {
			g.setAttribute("data-ad-slot", "000000000");
			document.getElementById("YYYYYY").appendChild(g);
		(adsbygoogle = window.adsbygoogle || []).push({});
	}
	
	/* Right Middle 300*600 */
	if (document.getElementById('XXXXXX')) {
			g.setAttribute("data-ad-slot", "11111111111");
			document.getElementById("XXXXXX").appendChild(g);
		(adsbygoogle = window.adsbygoogle || []).push({});
	}
}
</script>
__________________
Как кому, а мне нравится думать
Sevbanchik вне форума   Ответить с цитированием

Реклама
Старый 10.10.2019, 18:30   #2
infant
точно не ясновидящий
 
Регистрация: 15.03.2008
Сообщений: 999
Репутация: 104668
Отправить сообщение для infant с помощью ICQ

По умолчанию Re: Реклама во всех ins уже отображается

В вашем варианте создается один блок ins, поэтому первый раз норм при вызове будет, второй уже ошибка.

Я бы его через функцию сделал, которая при обращении проверяет наличие блока, если нету - создает, если есть - отдает.

С кодом помочь или сами победите ?
infant вне форума   Ответить с цитированием
Старый 10.10.2019, 18:34   #3
Sevbanchik
Аспирант
 
Аватар для Sevbanchik
 
Регистрация: 06.09.2011
Сообщений: 140
Репутация: 12753

ТопикСтартер Re: Реклама во всех ins уже отображается

Сам не победю JS знаю на 10 из 100
Если можете кинуть ссылку на какой-то мануал, который бы объяснил, был бы благодарен.
Sevbanchik вне форума   Ответить с цитированием
Старый 10.10.2019, 18:49   #4
Serggordienko
Дипломник
 
Регистрация: 01.01.2019
Сообщений: 98
Репутация: 683

По умолчанию Re: Реклама во всех ins уже отображается

как-то так
if (document.getElementById('YYYYYY') && !querySelector( 'ins[data-ad-slot="айди рекламного блока"]' ) )
Serggordienko вне форума   Ответить с цитированием
Старый 10.10.2019, 18:59   #5
infant
точно не ясновидящий
 
Регистрация: 15.03.2008
Сообщений: 999
Репутация: 104668
Отправить сообщение для infant с помощью ICQ

По умолчанию Re: Реклама во всех ins уже отображается

Вот как то так я бы сделал. Код сам не проверял, и нет проверки на повторный вызов, поэтому runAds запускать один раз для каждого elId.
Код:
function runAds (elId, adClient, adSlot) {
	var el = document.getElementById(elId);
	if (el != 'undefined' && el) {
		
		var g = document.createElement('ins');
		g.className = "adsbygoogle";
		g.style.display = "inline-block";
		g.style.width = "300px";
		g.style.height = "600px";
		g.setAttribute("data-ad-client", adClient);
		g.setAttribute("data-ad-slot", adSlot);
		el.appendChild(g);
		(adsbygoogle = window.adsbygoogle || []).push({});
	}}

if(window.innerWidth >= 960) {
	/* Right Top 300*600 */
	runAds('YYYYYY','ca-pub-ZZZZZZ', '000000000' );
	
	/* Right Middle 300*600 */
	runAds('XXXXXX','ca-pub-ZZZZZZ', '11111111111' );
}
infant вне форума   Ответить с цитированием
Сказали спасибо:
Старый 10.10.2019, 19:48   #6
AfterWar
Повелитель иллюзий
 
Аватар для AfterWar
 
Регистрация: 28.01.2013
Сообщений: 429
Репутация: 61495

По умолчанию Re: Реклама во всех ins уже отображается

infant подскажите когда блок выводится но реклама не показывается то есть какой параметр который отсутствует на странице?Хочу как то перехватить "непоказ" блока чтобы выводить альтернативную рекламу
__________________
Выжимаем из AdSense максимум + зарабатываем на пользователяхс AdBlock
AfterWar вне форума   Ответить с цитированием
Старый 10.10.2019, 19:51   #7
infant
точно не ясновидящий
 
Регистрация: 15.03.2008
Сообщений: 999
Репутация: 104668
Отправить сообщение для infant с помощью ICQ

По умолчанию Re: Реклама во всех ins уже отображается

Тут сразу не перехватишь, т.к. для показа требуется время (запрос+ответ+загрузка+отрисовка) , поэтому я лично оставляю как есть. Не бест конечно белые блоки на сайте, но зато нет нарушения условий гугла и вероятных технических проблем, которые не учтены.
infant вне форума   Ответить с цитированием
Старый 11.10.2019, 13:29   #8
Sevbanchik
Аспирант
 
Аватар для Sevbanchik
 
Регистрация: 06.09.2011
Сообщений: 140
Репутация: 12753

ТопикСтартер Re: Реклама во всех ins уже отображается

Цитата:
Сообщение от infant Посмотреть сообщение
Вот как то так я бы сделал. Код сам не проверял, и нет проверки на повторный вызов, поэтому runAds запускать один раз для каждого elId.
Код:
function runAds (elId, adClient, adSlot) {
	var el = document.getElementById(elId);
	if (el != 'undefined' && el) {
		
		var g = document.createElement('ins');
		g.className = "adsbygoogle";
		g.style.display = "inline-block";
		g.style.width = "300px";
		g.style.height = "600px";
		g.setAttribute("data-ad-client", adClient);
		g.setAttribute("data-ad-slot", adSlot);
		el.appendChild(g);
		(adsbygoogle = window.adsbygoogle || []).push({});
	}}

if(window.innerWidth >= 960) {
	/* Right Top 300*600 */
	runAds('YYYYYY','ca-pub-ZZZZZZ', '000000000' );
	
	/* Right Middle 300*600 */
	runAds('XXXXXX','ca-pub-ZZZZZZ', '11111111111' );
}
Спасибо, попробую.
Sevbanchik вне форума   Ответить с цитированием
Ответ



Опции темы

Быстрый переход


Регистрация Справка Календарь Поддержка Все разделы прочитаны