Реклама во всех ins уже отображается

Sevbanchik
На сайте с 06.09.2011
Offline
105
631

Пытаюсь оптимизировать код загрузки, т.к. 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>
Как кому, а мне нравится думать
infant
На сайте с 15.03.2008
Offline
170
#1

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

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

С кодом помочь или сами победите ?

Sevbanchik
На сайте с 06.09.2011
Offline
105
#2

Сам не победю :) JS знаю на 10 из 100 :)

Если можете кинуть ссылку на какой-то мануал, который бы объяснил, был бы благодарен.

S
На сайте с 01.01.2019
Offline
52
#3

как-то так

if (document.getElementById('YYYYYY') && !querySelector( 'ins[data-ad-slot="айди рекламного блока"]' ) )

infant
На сайте с 15.03.2008
Offline
170
#4

Вот как то так я бы сделал. Код сам не проверял, и нет проверки на повторный вызов, поэтому 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' );
}
AfterWar
На сайте с 28.01.2013
Offline
169
#5

infant подскажите когда блок выводится но реклама не показывается то есть какой параметр который отсутствует на странице?Хочу как то перехватить "непоказ" блока чтобы выводить альтернативную рекламу

⭐⭐⭐ЛУЧШАЯ АЛЬТЕРНАТИВА ADSENSE (ПЛАТЯТ, И ДЛЯ RU ДЛЯ БУРЖ) ( https://clck.ru/KgyqY )
infant
На сайте с 15.03.2008
Offline
170
#6

Тут сразу не перехватишь, т.к. для показа требуется время (запрос+ответ+загрузка+отрисовка) , поэтому я лично оставляю как есть. Не бест конечно белые блоки на сайте, но зато нет нарушения условий гугла и вероятных технических проблем, которые не учтены.

Sevbanchik
На сайте с 06.09.2011
Offline
105
#7
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' );
}

Спасибо, попробую.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий