Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   document.write по событию (https://javascript.ru/forum/events/27769-document-write-po-sobytiyu.html)

posmotret 24.04.2012 10:10

document.write по событию
 
Здравствуйте!
Есть код со стороннего сайта:
<!-- вставка туров -->
	<script  type='text/javascript'>
	document.write("<script language='JavaS");
	document.write("cript' sr");
	document.write("c='http://www.rozalist.ru/transl_tours/js_translation.php?");
	document.write(document.location.search.substr(1));
	document.write("&script_name=countries&agencymail=xxx@inbox.ru");
	document.write("'></sc");
	document.write("ript>");
	</script>
<!-- конец вставка туров -->


Я хочу у себя на сайте сделать так что бы он выполнялся при определенном событии но в этом случае он у меня отрабатывает так что все окно сайта становиться белым и на этом фоне делается нужный вывод...если я его вставляю в страницу то все работает нормально не нарушая внешний вид сайта. Пожалуйста помогите разобраться.

Aetae 24.04.2012 10:26

/google document.write

posmotret 24.04.2012 10:47

в гугле написано, что нужно делать через innerHTML но через него не отрабатывает скрипт

Раед 24.04.2012 11:08

при событии выполняйте следующий код:
script = document.createElement('script');
script.type = "text/javascript";
script.src = "http://www.rozalist.ru/transl_tours/js_translation.php?"+document.location.search.substr(1)+"&script_name=countries&agencymail=xxx@inbox.ru";
document.getElementByTagName('head')[0].appendChild(script);

posmotret 24.04.2012 11:33

Сделал вот так:
<a href="#" onclick="test()">test</a>

function test()
	{
		script = document.createElement('script');
		script.type = "text/javascript";
		script.src = "c='http://www.rozalist.ru/transl_tours/js_translation.php?"+document.location.search.substr(1)+"&script_name=countries&agencymail=xxx@inbox.ru";
		document.getElementsByTagName('head')[0].appendChild(script);
	}


Ничего не происходит. В консоль хрома попадает вот это:
Код:

GET http://xxx.ru/c='http://www.rozalist.ru/transl_tours/js_translation.php?&script_name=countries&agencymail=xxx@inbox.ru 404 (Not Found)
Вставляю как предложено сайтом все работает.

Раед 24.04.2012 11:47

А, ну да, забыл там 1 кусочек убрать.
Исправил пост, попробуйте ещё раз

script = document.createElement('script');
script.type = "text/javascript";
script.src = "http://www.rozalist.ru/transl_tours/js_translation.php?"+document.location.search.substr(1)+"&script_name=countries&agencymail=xxx@inbox.ru";
document.getElementByTagName('head')[0].appendChild(script);

posmotret 24.04.2012 12:08

Теперь ошибок нет. Загрузка со стороннего сайта идет, но ничего не появляется на странице.

Раед 24.04.2012 12:13

Цитата:

Сообщение от posmotret
но ничего не появляется на странице

А что собственно должно появится?

posmotret 24.04.2012 12:50

должен выводиться список стран

next_uk 24.04.2012 18:03

innerHTML = '' ";

используй, если я понял в чем проблема

Aetae 24.04.2012 18:44


1. За*я в head его подключать если сказано что скрипт что=то выводит. Ясен х*й , что ни*я не работает.
2. Скорее всего в том скрипте, что передаётся тоже используется document.write, по этому подключить его где-то ещё тоже не вариант, работать всё равно не будет. Надо делать в таком случае свой перехватчик write.

Раед 24.04.2012 19:30

Цитата:

Сообщение от Aetae
свой перехватчик write.

Типа
document.write = function(s) {
 document.getElementById('writeOut').innerHTML += s;
}
??

Aetae 25.04.2012 01:59

Тира того, только функция должна накапливать поступающие данные и только после полной загрузки делать innerHTML, ибо код может подаваться кусками(как в первом посте).

Раед 25.04.2012 10:22

И как по вашему ф-ия должна определять, когда закончится вывод?

melky 25.04.2012 10:27

Цитата:

Сообщение от Раед (Сообщение 171148)
И как по вашему ф-ия должна определять, когда закончится вывод?

когда пройдет секунда с момента последнего перехвата.

Раед 25.04.2012 17:59

melky,
Так что ли?
document.write = function(s) {
 document.write.timer && clearTimeout(document.write.timer);
 document.write.bufer || (document.write.bufer = '');
 document.write.bufer+=s;
 document.write.timer = setTimeout(function(){document.getElementById('writeOut').innerHTML+=document.write.bufer},1000);
}

melky 25.04.2012 19:28

Цитата:

Сообщение от Раед (Сообщение 171256)
melky,
Так что ли?
document.write = function(s) {
 document.write.timer && clearTimeout(document.write.timer);
 document.write.bufer || (document.write.bufer = '');
 document.write.bufer+=s;
 setTimeout(function(){document.getElementById('writeOut').innerHTML+=document.write.bufer},1000);
}

или когда дерево загрузится.

как-то так :

код писался на коленке и не тестился!
var target = document.body, // куда слить баффер.
     old_write = document.write, // на всякий
     buff = ""; // сам баффер

document.write = function(text){ 
     buff += text;
};

document.addEventListener("DOMContentLoaded", function rollback(){
     document.write = old_write; // возвращаем на место старый врайт
     target.insertAdjacentHTML("afterbegin", buff); // вставляем текст.
     document.removeEventListener("DOMContentLoaded", rollback, false); // удаляем обработчик, ибо он уже не нужен.
}, false);

Раед 25.04.2012 19:43

melky,
Не маньячим. Человеку нужен вывод по событию, и скорее всего, по клику там и т.п. А вы ему своё onDOMContentLoaded суёте.

P. S. Свой пост подправил. Там забыл таймер переменной присвоить

melky 25.04.2012 19:47

Цитата:

Сообщение от Раед (Сообщение 171272)
melky,
Не маньячим. Человеку нужен вывод по событию, и скорее всего, по клику там и т.п. А вы ему своё onDOMContentLoaded суёте.

тред не читал, посты писал :)


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