Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   какой аналог у document.write? (https://javascript.ru/forum/events/28517-kakojj-analog-u-document-write.html)

rori 22.05.2012 21:09

какой аналог у document.write?
 
есть у меня сайт и форум, на форуме есть функция - с помощью скрипта вставит на сайт вывод последних нескольких тем форума на сайт с помощью такого скрипта:

<script>//<!--
var forum='grinata.getbb.ru'; //Имя форума (укажите свой)
var num='5'; //Количество последних тем
var max='100'; // Максимальная длина темы
var ignore='';  // Список форумов, которые не нужно выводить (например закрытые) через запятую, если не нужно оставьте ''
var only=''; //  // Список форумов, которые НУЖНО выводить  и ТОЛЬКО ИХ через запятую, если не нужно оставьте ''
var type='0'; // Если изменить на еденицу, то будут выводится только топики со статусом "Объявление"
var show_first_post='0'; // показывать первое сообщение топика (0=нет,1=да)
var show_replies='0'; // показывать количество ответов (0=нет,1=да)
var attachments='0'; //показывать вложения (0=нет,1=да)
document.write('<script language=JavaScript src=http://'+forum+'/recent.php?set=1&num='+num+'&type='+type+'&max='+max+'&ignore='+ignore+'&only='+only+'&attachments='
+attachments+'&show_replies='+show_replies+'&show_first_post='+show_first_post+'></'+'script>');
--></script>


мне нужно, чтобы данный скрипт выполнялся в последнюю очередь, после загрузки все страницы, я сделал так:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<div id="eee"></div>
<script>//<!--
$(document).ready(function() {
var forum='grinata.getbb.ru'; //Имя форума (укажите свой)
var num='5'; //Количество последних тем
var max='100'; // Максимальная длина темы
var ignore='';  // Список форумов, которые не нужно выводить (например закрытые) через запятую, если не нужно оставьте ''
var only=''; //  // Список форумов, которые НУЖНО выводить  и ТОЛЬКО ИХ через запятую, если не нужно оставьте ''
var type='0'; // Если изменить на еденицу, то будут выводится только топики со статусом "Объявление"
var show_first_post='0'; // показывать первое сообщение топика (0=нет,1=да)
var show_replies='0'; // показывать количество ответов (0=нет,1=да)
var attachments='0'; //показывать вложения (0=нет,1=да)
$('#eee').append('<script language=JavaScript src=http://'+forum+'/recent.php?set=1&num='+num+'&type='+type+'&max='+max+'&ignore='+ignore+'&only='+only+'&attachments='
+attachments+'&show_replies='+show_replies+'&show_first_post='+show_first_post+'></'+'script>');
});
--></script>


и контент с темами не появляется вообще, если вместо
<script language=JavaScript src=http://'+forum+'/recent.php?set=1&num='+num+'&type='+type+'&max='+max+'&ignore='+ignore+'&only='+only+'&attachments='
+attachments+'&show_replies='+show_replies+'&show_first_post='+show_first_post+'></'+'script>

вставить слово любое, то оно выводится как надо - после загрузки страницы.
Вопрос, почему скрипт во втором варианте не выполняется а в первом все ок?
Или как сделать выполнения данного скрипта в последнюю очередь, после загрузки всей страницы?

берет скрипт контент вот осюда (форум на phpbb)
var i=0
<!-- BEGIN topicrow -->
i=i+1
document.writeln(i)
document.writeln('<a href="{topicrow.U_TOPIC}" >{topicrow.TOPIC_TITLE}</a>{topicrow.TOPIC_REPLIES}<br />\n');

   <!-- BEGIN first_post_text -->
   document.writeln('{topicrow.first_post_text.TOPIC_FIRST_POST_TEXT}<br />\n');
      <!-- BEGIN attachment -->
      document.writeln('{topicrow.first_post_text.attachment.DISPLAY_ATTACHMENT}<br />\n');
      <!-- END attachment -->
   document.writeln('<br />\n');
   <!-- END first_post_text -->
document.writeln('</li>');
<!-- END topicrow -->

melky 22.05.2012 21:21

Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

bes 23.05.2012 00:32

Попробуйте на основе этого:

<script>
alert(1);

window.onload = function () {
  var str = '<script>alert(2)</sc' +'ript> ';
  document.write(str);
}

alert(3);
</script>

rori 23.05.2012 00:54

Цитата:

Сообщение от bes (Сообщение 176147)
Попробуйте на основе этого:

<script>
alert(1);

window.onload = function () {
  var str = '<script>alert(2)</sc' +'ript> ';
  document.write(str);
}

alert(3);
</script>

сделал, сначала вылезает аллерт 1, потом 3, а потом вместо моей страницы грузит контент отдельно, потому, что врайт работает только при загрузке страницы, получается, что старницу в данном случае я какбы гружу 2 раза, первый раз моя страница, а второй раз уже только контент. Нужно както заменить врайт, чем-то другим. Вот если, что ссылка http://грината.рф

bes 23.05.2012 10:47

Если я правильно понял, то вам нужно после загрузки документа вставить нужные данные в нужный контейнер.


<div id="myDiv"></div>

<script>
alert(1);

window.onload = function () {
  var a = 'Hello, ';
  var str = a + 'world!';
  myDiv.innerHTML = str;
}

alert(3);
</script>

Раед 23.05.2012 11:30

bes,
со скриптами innerHTML не прокатит

bes 23.05.2012 12:23

Цитата:

Сообщение от Раед
bes,
со скриптами innerHTML не прокатит

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

rori 23.05.2012 13:12

Цитата:

Сообщение от bes (Сообщение 176184)
Как я понял, здесь не нужно, чтобы сразу выполнился скрипт, здесь требуется просто вывести необходимые данные в виде ссылок на последние темы.

<div id="myDiv"></div>

<script>
alert(1);
window.onload = function () {
var forum='grinata.getbb.ru'; //Имя форума (укажите свой)
var num='5'; //Количество последних тем
var max='100'; // Максимальная длина темы
var ignore='';  // Список форумов, которые не нужно выводить (например закрытые) через запятую, если не нужно оставьте ''
var only=''; //  // Список форумов, которые НУЖНО выводить  и ТОЛЬКО ИХ через запятую, если не нужно оставьте ''
var type='0'; // Если изменить на еденицу, то будут выводится только топики со статусом "Объявление"
var show_first_post='0'; // показывать первое сообщение топика (0=нет,1=да)
var show_replies='0'; // показывать количество ответов (0=нет,1=да)
var attachments='0'; //показывать вложения (0=нет,1=да)
var a = 'Hello, ';
var str = a + '<script language=JavaScript src=http://'+forum+'/recent.php?&num='+num+'&type='+type+'&max='+max+'&ignore='+ignore+'&only='+only+'&attachments='
+attachments+'&show_replies='+show_replies+'&show_first_post='+show_first_post+'></'+'script>';
myDiv.innerHTML = str;
}
alert(3);
</script>


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

может, что-то тут надо менять

var i=0
<!-- BEGIN topicrow -->
i=i+1
document.writeln(i)
document.writeln('<a href="{topicrow.U_TOPIC}" >{topicrow.TOPIC_TITLE}</a>{topicrow.TOPIC_REPLIES}<br />\n');
 
   <!-- BEGIN first_post_text -->
   document.writeln('{topicrow.first_post_text.TOPIC_FIRST_POST_TEXT}<br />\n');
      <!-- BEGIN attachment -->
      document.writeln('{topicrow.first_post_text.attachment.DISPLAY_ATTACHMENT}<br />\n');
      <!-- END attachment -->
   document.writeln('<br />\n');
   <!-- END first_post_text -->
document.writeln('</li>');
<!-- END topicrow -->

bes 23.05.2012 13:32

hello-то у вас на сайте выводится (вы случайно не через FF смотрите), имелось ввиду выводить в контейнер не содержимое в тегах <script></script>, а нужное вам содержимое.
Берите ваши переменные и помещайте их в строку, потом эту строку в innerHTML.
Вот пример, когда ссылка на yandex появится после загрузки основного содержимого.
<div>content</div>
<div id="myDiv"></div>

<script>
alert(1);

window.onload = function () {
  var a = '1) ';
  var str = a + '<a href="http://ya.ru" target="blank">yandex</a>';
  myDiv.innerHTML = str;
}

alert(3);
</script>

rori 23.05.2012 13:49

Цитата:

Сообщение от bes (Сообщение 176195)
hello-то у вас на сайте выводится (вы случайно не через FF смотрите), имелось ввиду выводить в контейнер не содержимое в тегах <script></script>, а нужное вам содержимое.
Берите ваши переменные и помещайте их в строку, потом эту строку в innerHTML.
Вот пример, когда ссылка на yandex появится после загрузки основного содержимого.
<div>content</div>
<div id="myDiv"></div>

<script>
alert(1);

window.onload = function () {
  var a = '1) ';
  var str = a + '<a href="http://ya.ru" target="blank">yandex</a>';
  myDiv.innerHTML = str;
}

alert(3);
</script>

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

bes 23.05.2012 14:04

Если FF, то почитайте http://javascript.ru/forum/events/28...-rabotaet.html

Все операции c переменными производите в коде обработчика onload, в строку помещайте только то, что хотите видеть при выводе.
Для примера вынес используемый адрес ссылки в отдельную переменную.

<div>content</div>
<div id="myDiv"></div>

<script>
alert(1);

window.onload = function () {
  var number = '1) ';
  var address = 'http://ya.ru';
  var str = number + '<a href="' + address + '" target="blank">yandex</a>';
  myDiv.innerHTML = str;
}

alert(3);
</script>

rori 23.05.2012 14:28

Цитата:

Сообщение от bes (Сообщение 176203)
Если FF, то почитайте http://javascript.ru/forum/events/28...-rabotaet.html

Все операции c переменными производите в коде обработчика onload, в строку помещайте только то, что хотите видеть при выводе.
Для примера вынес используемый адрес ссылки в отдельную переменную.

<div>content</div>
<div id="myDiv"></div>

<script>
alert(1);

window.onload = function () {
  var number = '1) ';
  var address = 'http://ya.ru';
  var str = number + '<a href="' + address + '" target="blank">yandex</a>';
  myDiv.innerHTML = str;
}

alert(3);
</script>

ну это ссылка на страницу в которой эти темы будут, а как их вставить прям в див?

bes 23.05.2012 14:44

Цитата:

Сообщение от rori
в общем иннер не работает в фф как я понял? мне нужно, чтобы во всех браузерах работало

Всё работает, в последнем посте той темы весь ответ, просто используйте не myDiv, а document.getElementById('myDiv').

rori 23.05.2012 14:50

Цитата:

Сообщение от bes (Сообщение 176210)
Всё работает, в последнем посте той темы весь ответ, просто используйте не myDiv, а document.getElementById('myDiv').

ок, спасибо Вам, с этим разобрался, в фф отображает, сделал примерно, отображает ссылку при заходе на которую открывается отдельное окно с этими темами и лишним кодом))

bes 23.05.2012 16:06

Цитата:

Сообщение от rori
сделал примерно, отображает ссылку при заходе на которую открывается отдельное окно с этими темами и лишним кодом))

Зачем открывать новое окно и использовать document.write, вы же можете передать в ваш код нужные ссылки и их имена.
Кстати каким образом вы определяете, какие ссылки выводить (наверное php-код у вас страницу формирует, так и передайте в страницу эти сслыки и их имена)?

Я для примера просто создал массив и использовал ссылки оттуда.

<div>content</div>
<div id="myDiv"></div>

<script>
window.onload = function () {
  var mas = [
    'http://www.yandex.ru', 
    'http://www.google.ru'
  ];

  var length = mas.length;
  var str = '';
  for (var i = 0; i < length; i++) {
    var k = i + 1;
    var str = str + k + '. <a href="' +mas[i] + '" target="_blank">link ' + k + '</a><br>';
  }

  myDiv.innerHTML = str;
}
</script>

rori 23.05.2012 17:23

Цитата:

Сообщение от bes (Сообщение 176219)
Зачем открывать новое окно и использовать document.write, вы же можете передать в ваш код нужные ссылки и их имена.
Кстати каким образом вы определяете, какие ссылки выводить (наверное php-код у вас страницу формирует, так и передайте в страницу эти сслыки и их имена)?

Я для примера просто создал массив и использовал ссылки оттуда.

<div>content</div>
<div id="myDiv"></div>

<script>
window.onload = function () {
  var mas = [
    'http://www.yandex.ru', 
    'http://www.google.ru'
  ];

  var length = mas.length;
  var str = '';
  for (var i = 0; i < length; i++) {
    var k = i + 1;
    var str = str + k + '. <a href="' +mas[i] + '" target="_blank">link ' + k + '</a><br>';
  }

  myDiv.innerHTML = str;
}
</script>

скопировал код, вставил в сайт, линки не отображаются вообще, ни в каких браузерах, в общем хз, что делать

bes 23.05.2012 18:36

Цитата:

Сообщение от rori
скопировал код, вставил в сайт, линки не отображаются вообще, ни в каких браузерах, в общем хз, что делать

Ну если myDiv оставили, то в FF понятно, что не сработает (зачем просто копировать, если надо понять как работает).

Поясните по какому принципу вы ссылки на вывод получаете, тогда можно будет понять как их вывести.

rori 23.05.2012 18:40

Цитата:

Сообщение от bes (Сообщение 176250)
Ну если myDiv оставили, то в FF понятно, что не сработает (зачем просто копировать, если надо понять как работает).

Поясните по какому принципу вы ссылки на вывод получаете, тогда можно будет понять как их вывести.

честно сам незнаю как они формируются эти ссылки, но в скрипте ссылка на страницу recent.php в которой такой код:

var i=0
<!-- BEGIN topicrow -->
i=i+1
document.writeln(i)
document.writeln('<a href="{topicrow.U_TOPIC}" >{topicrow.TOPIC_TITLE}</a>{topicrow.TOPIC_REPLIES}<br />\n');
 
   <!-- BEGIN first_post_text -->
   document.writeln('{topicrow.first_post_text.TOPIC_FIRST_POST_TEXT}<br />\n');
      <!-- BEGIN attachment -->
      document.writeln('{topicrow.first_post_text.attachment.DISPLAY_ATTACHMENT}<br />\n');
      <!-- END attachment -->
   document.writeln('<br />\n');
   <!-- END first_post_text -->
document.writeln('</li>');
<!-- END topicrow -->


попробывал через джиквери

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<div id="eee"></div>
<script type="text/javascript">
$(document).ready(function() {
var forum='grinata.getbb.ru'; //Имя форума (укажите свой)
var num='5'; //Количество последних тем
var max='100'; // Максимальная длина темы
var ignore='';  // Список форумов, которые не нужно выводить (например закрытые) через запятую, если не нужно оставьте ''
var only=''; //  // Список форумов, которые НУЖНО выводить  и ТОЛЬКО ИХ через запятую, если не нужно оставьте ''
var type='0'; // Если изменить на еденицу, то будут выводится только топики со статусом "Объявление"
var show_first_post='0'; // показывать первое сообщение топика (0=нет,1=да)
var show_replies='0'; // показывать количество ответов (0=нет,1=да)
var attachments='0'; //показывать вложения (0=нет,1=да)
$("#eee").load("http://grinata.getbb.ru/recent.php");
});
</script>


но не могу понять почему не работает, ведь если вставить отдельно в браузер http://grinata.getbb.ru/recent.php то данные есть

bes 23.05.2012 20:19

Странный php-скрипт вывод делает, даже без тегов <script></script>, и как видно заточен этот скрипт именно под вывод при помощи document.write.

Для использования предложенного мною способа, необходимо передать на страницу из php-скрипта два массива, в одном массиве ссылки (значения атрибутов href, значение одного из них представлено у вас как {topicrow.U_TOPIC}), в другом имена этих ссылок ({topicrow.TOPIC_REPLIES}).

rori 23.05.2012 20:47

Цитата:

Сообщение от bes (Сообщение 176267)
Странный php-скрипт вывод делает, даже без тегов <script></script>, и как видно заточен этот скрипт именно под вывод при помощи document.write.

Для использования предложенного мною способа, необходимо передать на страницу из php-скрипта два массива, в одном массиве ссылки (значения атрибутов href, значение одного из них представлено у вас как {topicrow.U_TOPIC}), в другом имена этих ссылок ({topicrow.TOPIC_REPLIES}).

аа я понял, почему сначала Ваш код не работал с массивом, вордпресс сам добавил в строчки пропущенные тег <p> блин, щас попробую вставить в массив ссылки эти

rori 23.05.2012 21:10

Цитата:

Сообщение от bes (Сообщение 176267)
Странный php-скрипт вывод делает, даже без тегов <script></script>, и как видно заточен этот скрипт именно под вывод при помощи document.write.

Для использования предложенного мною способа, необходимо передать на страницу из php-скрипта два массива, в одном массиве ссылки (значения атрибутов href, значение одного из них представлено у вас как {topicrow.U_TOPIC}), в другом имена этих ссылок ({topicrow.TOPIC_REPLIES}).

а откуда мой сайт будет знать откуда брать вообще контент, непойму куда, что подставлять, немогли бы Вы объяснить мне на прмере моих ссылок (адрес сайта grinata.getbb.ru а стараница откуда берется контент grinata.getbb.ru/recent.php, ссылки генерируются видимо из этой функции {topicrow.U_TOPIC} остальное не понятно

bes 23.05.2012 21:48

Когда в строке поиска набирается grinata.getbb.ru/recent.php, то сервер логично возвращает результат выполнения скрипта в этом php-файле, то есть просмотреть, что там у вас в этом файле, кроме того, что предоставлено на вывод, я не могу.
Ваш php-скрипт, используя свои механизмы, получает ссылки на последние темы (если, конечно, он именно их получает), вам придётся изучить как это оно там всё происходит.
И в принципе, поняв как получаются эти ссылки, я думаю, вы должны понять, что смысла передавать в документ javascript-код, который будет выводить ссылки о последних темах, нет, так как вы можете весь вывод прописать прямо в php-коде.

rori 23.05.2012 21:56

Цитата:

Сообщение от bes (Сообщение 176287)
Когда в строке поиска набирается grinata.getbb.ru/recent.php, то сервер логично возвращает результат выполнения скрипта в этом php-файле, то есть просмотреть, что там у вас в этом файле, кроме того, что предоставлено на вывод, я не могу.
Ваш php-скрипт, используя свои механизмы, получает ссылки на последние темы (если, конечно, он именно их получает), вам придётся изучить как это оно там всё происходит.
И в принципе, поняв как получаются эти ссылки, я думаю, вы должны понять, что смысла передавать в документ javascript-код, который будет выводить ссылки о последних темах, нет, так как вы можете весь вывод прописать прямо в php-коде.

ладно, буду думать:) спасибо за помощь

Valentin321 23.06.2020 09:42

var str = "20";
var a = 5;
document.write(str + a + "<br/>");
document.write(str - a + "<br/>");
document.write(str * "2" + "<br/>");
document.write(str / 2 + "<br/>");


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