Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как клонировать результат выполнения скрипта? (https://javascript.ru/forum/events/64624-kak-klonirovat-rezultat-vypolneniya-skripta.html)

mamonic 25.08.2016 15:32

Как клонировать результат выполнения скрипта?
 
Здравствуйте. Подскажите, можно ли загрузив 1 раз скрипт, вывести его результат в нескольких местах?
Допустим есть рекламный код ЯндексДиректа.

Пример кода, который прописан на странице:

<div id="yandex_ad"></div>
<script type="text/javascript">
(function(w, d, n, s, t) {
    w[n] = w[n] || [];
    w[n].push(function() {
        Ya.Direct.insertInto(123456, "yandex_ad", {
            stat_id: 1,
            ad_format: "direct",
            font_size: 0.8,
            font_family: "arial",
            type: "flat",
            limit: 1,
            title_font_size: 1,
            links_underline: true,
            site_bg_color: "FFFFFF",
            title_color: "000000",
            url_color: "000000",
            text_color: "000000",
            hover_color: "0066FF",
            sitelinks_color: "000000",
            favicon: true,
            no_sitelinks: false
        });
    });
    t = d.getElementsByTagName("script")[0];
    s = d.createElement("script");
    s.src = "//an.yandex.ru/system/context.js";
    s.type = "text/javascript";
    s.async = true;
    t.parentNode.insertBefore(s, t);
})(window, document, "yandex_context_callbacks");
</script>


В результате его выполнения в контейнере <div id="yandex_ad"></div> появляется содержимое.
Можно ли это содержимое вывести в разных местах одновременно?

Rise 25.08.2016 16:33

mamonic, элементарно:
<div id="yandex_ad1"></div>
<div id="yandex_ad2"></div>

w[n].push(function() {
	var x = 123456,
		y = "yandex_ad",
		z = {
			stat_id: 1,
			ad_format: "direct",
			font_size: 0.8,
			font_family: "arial",
			type: "flat",
			limit: 1,
			title_font_size: 1,
			links_underline: true,
			site_bg_color: "FFFFFF",
			title_color: "000000",
			url_color: "000000",
			text_color: "000000",
			hover_color: "0066FF",
			sitelinks_color: "000000",
			favicon: true,
			no_sitelinks: false
		};
	Ya.Direct.insertInto(x, y + 1, z);
	Ya.Direct.insertInto(x, y + 2, z);
});

mamonic 25.08.2016 16:53

Цитата:

Сообщение от Rise (Сообщение 426625)
mamonic, элементарно:
<div id="yandex_ad1"></div>
<div id="yandex_ad2"></div>

w[n].push(function() {
	var x = 123456,
		y = "yandex_ad",
		z = {
			stat_id: 1,
			ad_format: "direct",
			font_size: 0.8,
			font_family: "arial",
			type: "flat",
			limit: 1,
			title_font_size: 1,
			links_underline: true,
			site_bg_color: "FFFFFF",
			title_color: "000000",
			url_color: "000000",
			text_color: "000000",
			hover_color: "0066FF",
			sitelinks_color: "000000",
			favicon: true,
			no_sitelinks: false
		};
	Ya.Direct.insertInto(x, y + 1, z);
	Ya.Direct.insertInto(x, y + 2, z);
});

Спасибо, но тут получается, что скрипт отрабатывает 2 раза. В результате разное содержимое в блоках. Нужно именно клонировать результат. Т.е. чтобы содержимое блоков было одинаковое.

Rise 25.08.2016 17:15

Цитата:

Сообщение от mamonic (Сообщение 426626)
В результате разное содержимое в блоках.

А ты проверял...

mamonic 25.08.2016 18:07

Цитата:

Сообщение от Rise (Сообщение 426627)
А ты проверял...

Да.
Скрин 1 - результат: http://dl1.joxi.net/drive/2016/08/25...d368ca9d6d.jpg

Скрин 2 - исходник: http://dl1.joxi.net/drive/2016/08/25...13bf9509ad.jpg

рони 25.08.2016 18:12

Rise,
а почему одинаковое то будет? два раза будет запрос на сервер, точнее даже три. 1 раз плагин и 2 раза запрос информации плагином.между запросами информация может измениться и разных блоках будет отличие. искать надо какое то api или делать костыль типа опроса первого блока.

warren buffet 26.08.2016 05:59

ТС, ну так клонируй ноду или перепиши innerHTML из того блока, в этот, после того как.

warren buffet 26.08.2016 06:03

Например берем скрипт профессора и вместо

Ya.Direct.insertInto(x, y + 2, z);

пишем

document.getElementById(y + 2).innerHTML=document.getElementById(y + 1).innerHTML.

или что-нибудь поумнее в этом роде.

рони 26.08.2016 07:02

warren buffet,
какой смысл копировать пустой div?
Цитата:

Сообщение от warren buffet
или что-нибудь поумнее в этом роде.

Observer?

warren buffet 26.08.2016 08:22

А, ну понял, типа там запрос всего лишь формируется. Надо тогда покопаться в яндексной мануале по этой рекламе, наверняка там что-нить поджигается или есть калбеки.

mamonic 26.08.2016 14:51

В общем не получится, как я понял :)

warren buffet 26.08.2016 17:13

Есть там калбек, кури ману https://yandex.ru/support/partner/pr...der-callback_1

warren buffet 26.08.2016 17:15

метод insertInto (который в коде первого сообщения) принимает 4 параметра и все 4 передает в рендер, а у тебя там 3. Воткни калбек четвертым и посмотри что будет после загрузки блока.


Часовой пояс GMT +3, время: 19:42.